当前位置: 首页 > 知识库问答 >
问题:

Mongoose在另一个子文档数组中增加子文档数组值

储仲渊
2023-03-14

我有一份这样的文件

_id:'111'
products:[
   {
    _id:'pqr'
    nums:[
      {_id:'aaa',
      quantity:50
      },
      {_id:'bbb',
       quantity:50
      }
    ]
   }
]

上面的文档可以这样概括如下,便于理解。

   _id
   products: [
      nums: [
        {}, //quantity is in this object
        {}
      ]
   ]

我需要增加nums子文档中数量的值,该值位于产品子文档中,基于其\u id。

这是我迄今为止所尝试的,但它不起作用,因为我不知道如何捕获nums对象内的\u id,以便更新子子文档数组中的特定对象

Shop.findOneAndUpdate(
       { "_id": '111', "products._id": 'pqr'  },
          {
            "$inc": {
               "products.$[].nums.quantity": 1
            }
    }
)

我怎样才能做到这一点?

共有1个答案

谢建业
2023-03-14

在更新操作中使用arrayfilters:

db.getCollection("collectionName").findOneAndUpdate(
  { _id: "111" }, // Querying against `_id`, need to convert string to `ObjectId()` or instead use `.findByIdAndUpdate()`
  { $inc: { "products.$[p].nums.$[n].quantity": 1 } },
  {
    arrayFilters: [{ "p._id": "pqr" }, { "n._id": "aaa" }] // Inputs here
  }
  // Use { new : true } Option in mongoose to return updated document
);

输入文档:

{
    "_id" : "111",
    "products" : [ 
        {
            "_id" : "pqr",
            "nums" : [ 
                {
                    "_id" : "aaa",
                    "quantity" : 50
                }, 
                {
                    "_id" : "bbb",
                    "quantity" : 50
                }
            ]
        }, 
        {
            "_id" : "abc",
            "nums" : [ 
                {
                    "_id" : "aaa1",
                    "quantity" : 501
                }, 
                {
                    "_id" : "bbb1",
                    "quantity" : 501
                }
            ]
        }
    ]
}

输出文档:

{
    "_id" : "111",
    "products" : [ 
        {
            "_id" : "pqr",
            "nums" : [ 
                {
                    "_id" : "aaa",
                    "quantity" : 51 // This got incremented
                }, 
                {
                    "_id" : "bbb",
                    "quantity" : 50
                }
            ]
        }, 
        {
            "_id" : "abc",
            "nums" : [ 
                {
                    "_id" : "aaa1",
                    "quantity" : 501
                }, 
                {
                    "_id" : "bbb1",
                    "quantity" : 501
                }
            ]
        }
    ]
}

参考:猫鼬。findByIdAndUpdate()

 类似资料:
  • 我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?

  • b)“Units”字段包含带有“period”字段的子文档(日期对象数组),其中给定的日期位于数组中的第一和第二元素之间。 数据结构如下所示: 我尝试使用.find()和.aggregate()的各种组合,例如在periol数组上使用$project和$filter,在unit._id上使用$elemmatch之后使用$elemmatch,但是没有用--我得到了诸如“不能在数组上使用$filter

  • 我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。

  • 将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?

  • 我想使用mongoose从多个文档更新多个子文档。 我目前的代码是: 模式的一部分是: 但是这段代码只更新id arr中的最后一个元素。

  • 问题内容: 以下架构仅用于记录特定日期的总观看次数和观看次数。 因此,今天的视图将存储在不同于昨天的另一个子文档中。为了实现这一点,我尝试使用upsert,以便在查看产品的每一天都会创建子文档,并且计数将基于特定的一天进行递增和记录。我尝试使用以下功能,但似乎无法按我预期的方式工作。 我想得到我想要的功能会错过什么?任何帮助将不胜感激。 问题答案: 实际上,您在这里尝试做的事情需要您了解一些可能尚