聚合设置为超集

时间:2014-09-28 00:48:43

标签: mongodb aggregation-framework accumulator

鉴于MongoDB中的以下数据:

[ 
  { id: 1, stuff: ["A", "B"] },
  { id: 2, stuff: ["B", "C"] },
  ... (lots and lots of records)
]

是否有可能获得所有"东西的结合"套?例如["A","B","C"]

我已尝试使用$addToSet

aggregate([
  { $group: {
      _id: null, 
      allStuff: { $addToSet: "$stuff" }
    }
  }
])

但是会创建一组例如[ ["A", "B"], ["B", "C"] ]

1 个答案:

答案 0 :(得分:1)

好的,在展示您的尝试后,您可以执行以下操作:

db.a.aggregate([
  { $unwind : "$stuff" },
  { $group : {
    _id: null,
    all : {$addToSet : "$stuff"}
  }}
])

在开头它unwinds你拥有的数组中的所有元素,然后只是尝试将它们全部添加到集合中。

db.a.insert({ id: 1, stuff: ["A", "B"] })
db.a.insert({ id: 2, stuff: ["B", "C"] })
db.a.insert({ id: 3, stuff: ["A", "B", "C", "D"] })

给你:{ "_id" : null, "all" : [ "D", "C", "B", "A" ] }