Вы можете сделать это за один вызов БД, используя .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"
}
]
}