我怎么能解开一个数组并在适当的位置更新它

时间:2015-04-24 10:34:10

标签: mongodb aggregation-framework

我的文档有一个字段symptoms,它是一个数组数组。

我想$unwind$addToSet删除重复的项目,

然后只需更新文档。怎么做 ?

文档

  "symptoms": [
    [
      "A481 ",
      "A48  ",
      "     "
    ],
    [
      "A48177 ",
      "A48  ",
      "     "
    ]
  ]

预期输出

  "symptoms": 
    [
      "A481 ",
      "A48  ",
      "A48177 ",
      "     "
    ]

更新

实际上我的文档有数百个字段,如何更新symptoms并且不影响其他字段值,谢谢

1 个答案:

答案 0 :(得分:3)

您需要$unwind两次symptoms数组,并使用$project排除_id字段。您可以使用$out在新集合中写入结果或替换现有集合。

db.collection.aggregate(
    [
        { "$unwind": "$symptoms" }, 
        { "$unwind": "$symptoms" }, 
        { "$group": { 
                        "_id": "$_id", 
                        "symptoms": { "$addToSet": "$symptoms" }
                    }
        }, 
        { "$project": { "_id": 0, "symptoms": 1 }},
        { "$out": "collection" }
    ]
)

现在

db.collection.find()

给你:

{ "_id" : ObjectId("553a244bea67317760a44347"), "symptoms" : [ "A48177 ", "     ", "A48  ", "A481 " ] }