Mongodb 正在努力为NO-SQL进行复杂查询
我在MongoDB中有一个对象,试图编写一个查询,通过Mongodb 正在努力为NO-SQL进行复杂查询,mongodb,nosql,Mongodb,Nosql,我在MongoDB中有一个对象,试图编写一个查询,通过公司id查找文档,然后通过采购数组,在与用户id匹配的所有记录中将支付更新为真,而不覆盖其余数据 { _id: 27834682, company_id: 27, purchases: [ { paid: false, user_id: 19, items: [{...}, {...}], price: 10
公司id
查找文档,然后通过采购
数组,在与用户id
匹配的所有记录中将支付
更新为真
,而不覆盖其余数据
{
_id: 27834682,
company_id: 27,
purchases: [
{
paid: false,
user_id: 19,
items: [{...}, {...}],
price: 1085
},
...
]
}
我在试
Model.updateName({company\u id:company\u id},{“purchases.$[]”:{$set:{paid:true}}}})
但它删除了对象中的其他数据,甚至无法通过user\u id
进行过滤
此查询的正确方法是什么?更新数组字段时,可以指定用于确定要更新的数组元素的方法 快速修复
- 在
中定义条件数组过滤器
,语法用户id:19
,element.user\u id
是用户定义键,您可以设置任何键名,element
是 数组中的标识符字段user\u id
- 更新操作从
$set
- 使用
设置数组元素的值,这里$[key]
是我们在arrayFilters中定义的用户定义键,它看起来是key
购买。$[element]。付费的
{“$set”:{“purchases.$[].paid”:true}
-您尝试过这种方法吗?它不会被覆盖,谢谢。但是,我仍然不知道如何按用户id进行过滤,此时更新数组中的每个对象
Model.updateMany(
{
company_id: company_id
},
{
$set: {
"purchases.$[element].paid": true
}
},
{
arrayFilters: [
{
"element.user_id": 19
}
]
}
)