23

假设我有一个名为“people”的集合,其中包含以下文档:

{
    "name": "doug",
    "colors": ["blue", "red"]
}

{
    "name": "jack",
    "colors": ["blue", "purple"]
}

{
    "name": "jenny",
    "colors": ["pink"]
}

我将如何获得所有子数组的串联数组colors,即?

["blue", "red", "blue", "purple", "pink"]
4

2 回答 2

33

好吧,Try 应该适合你!!

db.people.distinct("colors")
于 2013-09-02T17:15:16.610 回答
28

尝试使用聚合:

db.people.aggregate([
  {$unwind:"$colors"},
  {$group:{_id:null, clrs: {$push : "$colors"} }},
  {$project:{_id:0, colors: "$clrs"}}
])

结果:

{
"result" : [
    {
        "colors" : [
            "blue",
            "red",
            "blue",
            "purple",
            "pink"
        ]
    }
],
"ok" : 1
}

更新

如果要在结果数组中获取唯一值,可以使用$addToSet运算符而不是$push$group阶段中。

于 2013-09-02T17:35:33.590 回答