mongodb - 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
.
解决方案
您可以使用.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"
}
]
}
推荐阅读
- html - 引导导航从页面退出
- c# - 是否可以忽略部分视图的模型?
- laravel - Laravel 计划作业中为 foreach() 提供的参数无效
- jquery - 如果我放链接,为什么我的 jquery 不起作用
- c# - UWP:System.Reflection.TargetInvocationException
- sybase - 从应用程序调用存储过程时如何在sybase存储过程中使用打印语句
- swift - 为什么应用于实例的变异方法不保存更改?迅速
- c# - DynamoDBGlobalSecondaryIndexRangeKey 属性未将值映射到该字段
- python - 如何使用 tshark 将 pcap 转换为十六进制流?
- sql - 插入第三个表,其中 2 个表具有相同的 Id