我在 MongoDB 中有一个对象,并尝试编写一个查询,通过 company_id
查找文档,然后遍历 purchases
数组并更新 paid
> 在与 user_id
匹配的所有记录中将其设置为 true
,而不覆盖其余数据。
{
_id: 27834682,
company_id: 27,
purchases: [
{
paid: false,
user_id: 19,
items: [{...}, {...}],
price: 1085
},
...
]
}
我正在尝试
Model.updateMany({company_id: company_id}, {"purchases.$[]": {$set: {paid: true}}})
但它删除了对象中的其他数据,甚至无法通过 user_id
进行过滤。
此查询的正确方法是什么?
最佳答案
更新数组字段时,可以指定arrayFilters确定要更新哪些数组元素。
快速修复,
定义条件
user_id: 19
在arrayFilters
, 语法<user define key>.<identifier key>
,element.user_id
,element
是用户自定义键,可以设置任意键名,user_id
是 数组内的标识符字段更新操作以
$set
开始使用
$[key]
设置数组元素的值,这里key
是我们在 arrayFilters 中定义的用户定义键,它看起来purchases.$[element].paid
Model.updateMany(
{
company_id: company_id
},
{
$set: {
"purchases.$[element].paid": true
}
},
{
arrayFilters: [
{
"element.user_id": 19
}
]
}
)
关于mongodb - 努力为 NO-SQL 进行复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63230885/