Mongodb 正在努力为NO-SQL进行复杂查询

Mongodb 正在努力为NO-SQL进行复杂查询,mongodb,nosql,Mongodb,Nosql,我在MongoDB中有一个对象,试图编写一个查询,通过公司id查找文档,然后通过采购数组,在与用户id匹配的所有记录中将支付更新为真,而不覆盖其余数据 { _id: 27834682, company_id: 27, purchases: [ { paid: false, user_id: 19, items: [{...}, {...}], price: 10

我在MongoDB中有一个对象,试图编写一个查询,通过
公司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]
    设置数组元素的值,这里
    key
    是我们在arrayFilters中定义的用户定义键,它看起来是
    购买。$[element]。付费的


{“$set”:{“purchases.$[].paid”:true}
-您尝试过这种方法吗?它不会被覆盖,谢谢。但是,我仍然不知道如何按用户id进行过滤,此时更新数组中的每个对象
Model.updateMany(
    { 
        company_id: company_id
    },
    {
        $set: {
            "purchases.$[element].paid": true
        }
    },
    { 
        arrayFilters: [ 
            { 
                "element.user_id": 19
            }
        ]
    }
)