簡體   English   中英

MongoDB 更新並插入數組

[英]MongoDB update and insert on an array

我有一個 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 查詢中,設置所有EXCEPTIONS.$.CURR:false並將一個新對象插入到EXCEPTIONS數組中,主要是CURR : true

對於 MongoDB 版本的 >= 3.2您可以使用.bulkWrite()在一次數據庫調用中完成此操作:

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" : {}
}

結果在 DB :

/* 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"
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM