首页 > 解决方案 > 获取所有唯一用户的 MongoDB 查询

问题描述

我目前正在使用 MongoDB 数据库。我的问题是我有很多同名的人,但他们是不同的人,有不同的年龄、出生地等。

文件的一个例子是:

{
        "_id" : ObjectId("6072fee3145c156c123ce3"),
        "Users" : [
                {
                        "name" : "John Davies",
                        "age" : NumberLong(35),
                        "place_of_birth" : "Cardigan"
                },
                {
                        "name" : "Edward Jones",
                        "age" : "blank",
                        "place_of_birth" : "Liverpool"
                },
                {
                        "name" : "Daniel Rhys",
                        "age" : NumberLong(63),
                        "place_of_birth" : "Cardigan"
                },
                {
                        "name" : " Evan Williams",
                        "age" : NumberLong(61),
                        "place_of_birth" : "Cardigan"
                },
                {
                        "name" : "John Davies ",
                        "age" : NumberLong(21),
                        "place_of_birth" : "Cardigan"
                }
        ]
}
{
        "_id" : ObjectId("6072fee3145c156c321ef6"),
        " Users " : [
                {
                        "name" : "John Davies",
                        "age" : NumberLong(35),
                        "place_of_birth" : "Swansea"
                },
                {
                        "name" : "Edward Jones",
                        "age" : "blank",
                        "place_of_birth" : "Liverpool"
                },
                {
                        "name" : "Daniel Rhys ",
                        "age" : NumberLong(63),
                        "place_of_birth" : "Barry"
                },
                {
                        "name" : "Evan Williams",
                        "age" : NumberLong(61),
                        "place_of_birth" : "Cardigan"
                },
                {
                        "name" : "John Davies",
                        "age" : NumberLong(21),
                        "place_of_birth" : "Cardigan"
                }
        ]
}

所以我的目标是查询这些数据,以便获得所有姓名以及每个唯一人的年龄和出生地一次。

所以输出应该包含(我只是放入一个表来更清楚地显示查询结果应该是什么):

姓名 年龄 出生地
约翰戴维斯 35 开襟衫
爱德华·琼斯 空白的 利物浦
丹尼尔·里斯 63 开襟衫
埃文·威廉姆斯 61 开襟衫
约翰戴维斯 21 开襟衫
丹尼尔·里斯 63 巴里
约翰戴维斯 35 斯旺西

任何关于最佳方法的建议或指导将不胜感激

标签: mongodbaggregation-framework

解决方案


  • $unwind解构Users数组
  • $groupUsers对象
  • $replaceRootUsers对象替换为根
db.collection.aggregate([
  { $unwind: "$Users" },
  { $group: { _id: "$Users" } },
  { $replaceRoot: { newRoot: "$_id" } }
])

操场


第二种选择: 的替代品$replaceRoot

  • $project显示必填字段
db.collection.aggregate([
  { $unwind: "$Users" },
  { $group: { _id: "$Users" } },
  {
    $project: {
      _id: 0,
      name: "$_id.name",
      age: "$_id.age",
      place_of_birth: "$_id.place_of_birth"
    }
  }
])

操场


推荐阅读