mongodb 根据文档上的特定关键字过滤唯一文档

ssm49v7z  于 2023-01-01  发布在  Go
关注(0)|答案(1)|浏览(125)

我正在使用Mongo聚合框架,假设我有这样的集合结构

{
  {
    _id: ObjectId(123)
    name: john,
    age: 30
  },
  {
    _id: ObjectId(456)
    name: moore,
    age: 45
  },
  {
    _id: ObjectId(789)
    name: carl,
    age: 30
  }
}

例如,我只想获取唯一的年龄文档,结果应如下所示

{
  {
    _id: ObjectId(123)
    name: john,
    age: 30
  },
  {
    _id: ObjectId(456)
    name: moore,
    age: 45
  },
}

以上结果剔除了同年龄段的文献,取其中任何一份文献。
如何根据年龄对集合进行这种设置操作,这样使用mongo聚合只能得到唯一的年龄文档集合

mwkjh3gx

mwkjh3gx1#

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

1.$group将保留单个文档的年龄。由于您希望保留文档的结构,请使用$$ROOT将整个文档分配给一个字段。
这个阶段的输出将是这样的。

{
  "_id": 45,
  "firstDocument": {
    "_id": 345,
    "age": 45,
    "name": "moore"
  }
}

1.$replaceRoot会用你想要的替换上一阶段的整个文档。在本例中,它是我们分配给“firstDocument”字段的内容。
MongoPlayground

相关问题