我的mongo db集合包含具有数组的文档,每个数组元素都有如下子字段:
样本文件:
{
"_id" : ObjectId("63fcb6654732c97e476e642d"),
"name" : "test1",
"appliedRules" : [
{
"id" : "rul1",
"type" : "RULE_TYPE_1"
},
{
"id" : "rul1",
"type" : "RULE_TYPE_2"
},
{
"id" : "rul1",
"type" : "RULE_TYPE_2",
"mId" : NumberInt(10006),
}
]
}
如果doc.appliedRules.type是RULE_TYPE_2,则它可以具有整数的可选字段“mId”。
如果“中”字段是目前在数组字段,那么我需要改变它数组/列表中现有的文件集合。
我尝试了几个选项,并在下面分享了一种接近解决方案的方法,但也不起作用。如何在mongo db 3.6.0中解决这个问题?
**注意:**Mongo DB Server为AWS DocumentDB 3.6.0版本
下面的一个看起来接近我需要的,但mongo shell也给出了错误。
MongoServerError:参数使用的类型错误
db.reports_new_test.updateMany(
{ $and: [
{ 'appliedRules.type': "RULE_TYPE_2" },
{ 'appliedRules.mid': { $exists: true } }
] },
[
{
$set: {
'appliedRules': {
$map: {
input: '$appliedRules',
as: 'rule',
in: {
$mergeObjects: [
'$$rule',
{
mid: {
$cond: {
if: { $isArray: "$$rule.mid" },
then: "$$rule.mid",
else: [ "$$rule.mid" ]
}
}
}
]
}
}
}
}
}
]
);
如何解决呢?
1条答案
按热度按时间xeufq47z1#
您正在尝试使用聚合管道进行更新,Amazon DocumentDB目前不支持聚合管道。由于version 4.2,因此可以使用MongoDB。我可能会使用聚合框架创建一个与您的条件匹配的游标,然后使用$set迭代文档以更新它们。