MongoDb聚合根据参数删除重复项

MongoDb aggregation delete duplicates according to parameter

我正在尝试了解如何进行 mongodb 聚合以根据特定参数删除重复文档。当我说重复时,我并不是说整个文件都是一样的。 例如我有以下文件:

{
  'event': 123,
  'element': 'element1'
},
{
  'event': 456
  'element': 'element2'
},
{
  'event': 789
  'element': 'element1'
},
{
  'event': 111
  'element': 'element3'
}

我想做一个聚合,如果我指定字段“元素”,将 return 我所有没有元素重复的文档。我知道典型的问题是,好吧,但是如果有两份带有 'element1' 的文档,我想要哪一份?答案是我不介意 return 是我一个还是另一个,这就是为什么我不知道这是否可能

return 示例:

{
  'event': 123,
  'element': 'element1'
},
{
  'event': 456
  'element': 'element2'
},
{
  'event': 111
  'element': 'element3'
}

如果return是我也行:

{
  'event': 456
  'element': 'element2'
},
{
  'event': 789
  'element': 'element1'
},
{
  'event': 111
  'element': 'element3'
}

无论如何都不是删除。是对领域内具有独特价值的文献的选择。

这些事情是由grouping documents by the field in question. Since you need any of the matching documents you can use $first累加器完成的:

db.collection.aggregate([
  {
    "$group": {
      "_id": "$element",
      "doc": {
        "$first": "$$ROOT"
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": "$doc"
    }
  }
])