mongodb - 努力为 NO-SQL 进行复杂查询

标签 mongodb nosql

我在 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: 19arrayFilters , 语法 <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/

相关文章:

java - Spring数据mongoRepository查询排序

indexing - cassandra中分区摘要的内部结构

java - 在绝地武士中建立联系

java - 使用 Objectify 查询 2 个实体

mongodb - 有没有一个好的库可以让 Kotlin 协程异步访问 Mongo?

python - Map减少存储 'Nan',同时计数大对象

javascript - 为什么表单主体在 PUT 请求上返回 null?

java - 无法使用带参数的构造函数 NO_CONSTRUCTOR 实例化 java.util.Set

firebase - 允许用户只访问他们自己在 Firebase 数据库中的数据?

database - 如何对庞大的遗留数据库进行现代化改造?