从MongoDB的整个集合中获取所有唯一的字段数组组合

时间:2018-11-01 11:00:23

标签: mongodb

让我们说我有以下收藏

{
  _id:1,
  item:"cat"
  keywords:['A','B']
},

{
  _id:2,
  item:"cat"
  keywords:['B','C']
},

{
  _id:3,
  item:"dog"
  keywords:['C','D']
},

我想得到以下结果:

[{"cat", "A"}, {"cat", "B"}, {"cat", "C"}, {"dog", "C"}, {"dog", "D"}]

基本上创建项目和关键字之间的组合,并删除重复项。

有可能吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您必须在数组上使用$unwind,然后可以使用$group(按常量值)将所有元素放入一个数组,$addToSet将处理指定对的唯一性:< / p>

db.col.aggregate([
    {
        $unwind: "$keywords"
    },
    {
        $group: {
            _id: null,
            unique: { $addToSet: { item: "$item", keyword: "$keywords" } }
        }
    }
])

然后您可以在$unwind字段上的其他unique上使用文档列表,而不是单个文档。