MongoDB将数组中的可选子字段从整数更改为列表

oalqel3c  于 2023-04-20  发布在  Go
关注(0)|答案(1)|浏览(118)

我的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" ]
                              }
                           }
                        }
                     ]
                  }
               }
            }
         }
      }
   ]
);

如何解决呢?

xeufq47z

xeufq47z1#

您正在尝试使用聚合管道进行更新,Amazon DocumentDB目前不支持聚合管道。由于version 4.2,因此可以使用MongoDB。我可能会使用聚合框架创建一个与您的条件匹配的游标,然后使用$set迭代文档以更新它们。

相关问题