首页 > 解决方案 > MongoDB 更新并插入数组

问题描述

我有一个 mongo 文档,如下所示:

{
  "ITEMS": [
    {
      "BUKRS": "1000",
      "GLACC": "476000",
      "NETWR": 100
    }
  ],
  "EXCEPTIONS": [
    {
      "CURR": true,
      "EVENT": "WEB",
      "DATE_TIME": "2020-02-08T22:46:29.219Z"
    },
    {
      "CURR": true,
      "EVENT": "WEB",
      "DATE_TIME": "2020-02-08T22:46:29.219Z"
    },
    {
      "CURR": false,
      "EVENT": "WEB",
      "DATE_TIME": "2020-02-08T22:46:29.219Z"
    }
  ]
}

我需要实现的是在一个 mongo 查询中,设置 allEXCEPTIONS.$.CURR:false并将一个新对象插入EXCEPTIONS数组,大部分是CURR : true.

标签: mongodbmongodb-query

解决方案


您可以使用.bulkWrite()对 MongoDB 版本的 >=进行一次数据库调用3.2

db.collection.bulkWrite([{
    updateOne: {
        "filter": {}, // If you've any filters to match a doc give it here
        "update": { $set: { "EXCEPTIONS.$[].CURR": false } } // $[] operator updates all elements in an array.
    }
}, {
    updateOne: {
        "filter": {},
        "update": {
            $push: {
                "EXCEPTIONS": {
                    "CURR": true,
                    "EVENT": "WEB",
                    "DATE_TIME": "New_Time"
                }
            }
        }
    }
}])

数据库中的文档:

/* 1 */
{
    "_id" : ObjectId("5e475da77f8bc30a7504f0b6"),
    "ITEMS" : [ 
        {
            "BUKRS" : "1000",
            "GLACC" : "476000",
            "NETWR" : 100
        }
    ],
    "EXCEPTIONS" : [ 
        {
            "CURR" : true,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }, 
        {
            "CURR" : true,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }, 
        {
            "CURR" : false,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }
    ]
}

回复 :

/* 1 */
{
    "acknowledged" : true,
    "deletedCount" : 0.0,
    "insertedCount" : 0.0,
    "matchedCount" : 2.0, // It's 2 as it modified array/doc twice
    "upsertedCount" : 0.0,
    "insertedIds" : {},
    "upsertedIds" : {}
}

数据库中的结果:

/* 1 */
{
    "_id" : ObjectId("5e475da77f8bc30a7504f0b6"),
    "ITEMS" : [ 
        {
            "BUKRS" : "1000",
            "GLACC" : "476000",
            "NETWR" : 100
        }
    ],
    "EXCEPTIONS" : [ 
        {
            "CURR" : false,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }, 
        {
            "CURR" : false,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }, 
        {
            "CURR" : false,
            "EVENT" : "WEB",
            "DATE_TIME" : "2020-02-08T22:46:29.219Z"
        }, 
        {
            "CURR" : true,
            "EVENT" : "WEB",
            "DATE_TIME" : "New_Time"
        }
    ]
}

推荐阅读