[英]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.