当前位置:  开发笔记 > 编程语言 > 正文

嵌套数组的MongoDB $ inc和$ setOnInsert

如何解决《嵌套数组的MongoDB$inc和$setOnInsert》经验,为你挑选了0个好方法。

我搜索了SO并抓取了Mongoose/Mongo文档,但无济于事,因此我的问题.

我想$inc在嵌套数组中的对象中的值,或者$setOnInsert如果它还没有,则创建该对象.

我看到的Mongo文件如下:

{
  "_id": "123",
  "members": [
    {
      "first": "johnny",
      "last": "knoxville",
      "score": 2
    },
    {
      "first": "johnny",
      "last": "cash",
      "score": 3
    },
    // ...and so on
  ],
}

根据这个例子,我的用例是:

count如果数组对象中存在变量(基于first和找到last),则递增该变量

如果对象score尚不存在,则将对象添加为1

从这篇文章中我了解到我不能同时$set拥有一个我想要的变量$inc.好的 - 这很有道理.

这篇文章有助于理解位置$运算符,以便找到嵌套对象并增加它.

如果我知道该文档存在,我可以简单地进行如下更新:

myDoc = { first: 'johnny', last: 'cash' };

myCollection.findOneAndUpdate(
  {
    _id: '123',
    'members.first': 'johnny',
    'members.last': 'cash'
  },
  {
    $inc: { "members.$.score": 1 }
  }
);

但是如果我想插入成员(score: 1如果它还不存在)怎么办?

我的问题是,当我使用upsert:true时,位置运算符会抛出错误,因为它可能不会与upsert一起使用(请参阅官方文档).

我尝试了各种组合,并希望避免2 db访问(读/写).

有没有办法在一次操作中执行此操作?

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有