我有一份这样的文件
_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
}
}
)
我怎样才能做到这一点?
在更新操作中使用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,以便在查看产品的每一天都会创建子文档,并且计数将基于特定的一天进行递增和记录。我尝试使用以下功能,但似乎无法按我预期的方式工作。 我想得到我想要的功能会错过什么?任何帮助将不胜感激。 问题答案: 实际上,您在这里尝试做的事情需要您了解一些可能尚