【问题标题】:Mongo: How to update multiple records in one queryMongo:如何在一个查询中更新多条记录
【发布时间】:2020-06-08 03:31:31
【问题描述】:

您好,我需要帮助 mongodb 通过数组值在一个查询中更新多条记录:

此数据

{ 
    "_id" : ObjectId("5edcd82197ace301c45ccb02"), 
    "date" : NumberInt(20200607),  
    "result" : [
        {
            "_id" : ObjectId("5edcd82197ace301c45ccb03"), 
            "balance" : NumberInt(300),
        },
        {
            "_id" : ObjectId("5edcd82197ace301c45ccb04"), 
            "balance" : NumberInt(200),
        }
    ]
}

查询

use auth;
db.getCollection("dailyreportbalace").updateMany(
    [{
        "_id": ObjectId("5edcd82197ace301c45ccb02"),
        "result._id": ObjectId("5edcd82197ace301c45ccb03")
    },{
        "_id": ObjectId("5edcd82197ace301c45ccb02"),
        "result._id": ObjectId("5edcd82197ace301c45ccb04")
    }],
    [{
        "$set": { "result.$.balance": NumberInt(60) }
    },{
        "$set": { "result.$.balance": NumberInt(80) }
    }],
    {upsert: true, multi: true}
)

错误查询 E QUERY [js] 错误:更新操作文档必须包含原子操作符:

【问题讨论】:

  • 你做错了,如果你看更新docs,第一个参数是query,不能是数组。

标签: node.js mongodb


【解决方案1】:

请考虑我的评论。

你做错了,如果你看更新docs,第一个参数是query,不能是数组。

您需要使用filtered positional operator。如下所示:

db.getCollection("dailyreportbalace").updateMany(
    {"_id": ObjectId("5edcd82197ace301c45ccb02")},
    {
        "$set": { 
            "result.$[elem1].balance": NumberInt(60),
            "result.$[elem2].balance": NumberInt(80) }
    },
    {
        upsert: true,
        multi: true,
        arrayFilters: [
            {"elem1._id": ObjectId("5edcd82197ace301c45ccb03")},
            {"elem2._id": ObjectId("5edcd82197ace301c45ccb04")}]
    }
)

【讨论】:

  • 嘿,这有帮助吗?
猜你喜欢
  • 2013-12-13
  • 2021-11-26
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2023-03-30
  • 2021-09-22
  • 1970-01-01
相关资源
最近更新 更多