【发布时间】:2021-12-24 07:55:25
【问题描述】:
作为我个人项目的一部分,我正在学习如何编写 MongoDB 查询。我想我遗漏了一些小东西或大东西(我不知道),并希望有人能指出我的 MongoDB 查询出了什么问题。我正在研究 MongoDB 上提供的流行邮政编码数据集:https://docs.mongodb.com/manual/tutorial/aggregation-zip-code-data-set/
zipcodes 集合中的文档示例具有以下形式:
{
"_id": "10280",
"city": "NEW YORK",
"state": "NY",
"pop": 5574,
"loc": [
-74.016323,
40.710537
]
}
目标:我正在尝试查找纽约州 (NY) 的每个城市的人口,其中的结果列出了 每个 中包含的邮政编码城市。输出应如下所示:
{
_id : "ELMIRA",
population : <population of ELMIRA>,
postal_codes : [
<PostalCode1 in ELMIRE>,
<PostalCode2 in ELMIRE>,
<PostalCode3 in ELMIRA>
]
},
{
_id : "WHITESVILLE",
population : <population of WHITESVILLE>,
postal_codes : [
<PostalCode1 in WHITESVILLE>
]
},
我的代码:这是我目前写的内容
db.getCollection('codes').aggregate([
{
$group: {
_id: {city: "$city", state:"$state"},
population: {$sum: "$pop"},
postal_codes: {$addToSet: "$_id"}
}
},
{
$match: {
"_id.state":"NY"
}
},
{
$group: {
_id: "$_id.city",
population: {$last: "$population"},
postal_codes: {$last: "$postal_codes"}
}
}
])
问题 - 我在代码中看到的问题是,它只列出了纽约一个具有多个邮政编码的城市的 一个 邮政编码,如如下图所示。在美国,一个城市可能会重叠多个邮政编码。如何修复我的查询以包含纽约每个城市的所有个邮政编码,而不是其中一个?
{
"_id" : "OSSINING",
"population" : NumberInt(29926),
"postal_codes" : [
"10562"
]
}
{
"_id" : "COLD SPRING",
"population" : NumberInt(4904),
"postal_codes" : [
"10516"
]
}
{
"_id" : "NORTH WOODMERE",
"population" : NumberInt(19582),
"postal_codes" : [
"11581"
]
}
【问题讨论】:
-
是this 你在找什么?数据集非常大,所以我只能抽取几个文档进行测试。
-
问题是你在这一行使用了 $last 。邮政编码:{$last: "$postal_codes"}。 $last 是一个数组运算符,只返回数组的最终值。将 $last 更改为 $push,这样每个邮政编码都会添加,您应该没问题。
-
@RubénVega,感谢您的评论。让我将其更改为 $push 并测试更改。我会检查它是否能解决问题。
-
@ray,是的,我正在寻找类似于您在 Mongo 代码中的内容。
标签: arrays database mongodb mongodb-query