mongodb - 获取所有唯一用户的 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 | 斯旺西 |
任何关于最佳方法的建议或指导将不胜感激
解决方案
$unwind
解构Users
数组$group
按Users
对象$replaceRoot
将Users
对象替换为根
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"
}
}
])
推荐阅读
- swift - 如何从内存中卸载 GMSMapView?
- css - 具有不必要的白色背景的范围滑块
- eslint - 如何将 eslint 配置为与 svelte 和 postcss-nesting 一起使用?
- reactjs - 如何设置 npm 包的依赖项以支持树抖动
- sass - 实时服务器不能很好地与 Google Drive(服务器端文件)一起工作,有没有办法让它工作?
- python - 如何在 selenium python 中使用 spasific 国家/地区设置随机假地理定位
- react-native - agora.io react-native setEnableSpeakerphone 花费了太多时间
- jquery - 如何在字符串中选择匹配的文本并使用 jQuery/JS 替换它
- postgresql - 从 travis-ci 迁移后,Nosetests 无法向 postgres 进行身份验证
- python - 我无法使用 Selenium 在 PHP 网站上获取元素