Mongodb 用 groupby 之类的东西限制结果数量
Mongodb limit result number with something like groupby
我有一个具有多个层次结构的 MongoDB 集合,例如,我将使用一个包含国家/地区的集合,其中包含城市,每个文档都是针对特定城市的,并且包含国家/地区的人口值和城市(示例中的country_pop和city_pop)这非常简单,我实际上有6个层次结构和大量数据。
[
{
"country": "France",
"city": "Paris",
"country_pop": 63000000,
"city_pop": 2200000,
"year": 2015
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63000000,
"city_pop": 850726,
"year": 2015
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63000000,
"city_pop": 441802,
"year": 2015
},
{
"country": "France",
"city": "Paris",
"country_pop": 63500000,
"city_pop": 2350000,
"year": 2016
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63500000,
"city_pop": 880726,
"year": 2016
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63500000,
"city_pop": 445802,
"year": 2016
}
]
我目前正在使用 doctrine mongo odm 将我的文档混合到 Php 对象中,但这不是必需的。
我想要实现的是在我的 php 脚本值中显示类似的内容:
- 法国:
- 2015: 63000000
- 2016: 63500000
目前,我得到 all 个匹配 {"country": "France"}
的文档,所以在这个例子中我将得到 6 个条目。但实际上,有大量数据,获得 6 个条目有点不好,我只能得到两个,一个是 2015 年,一个是 2016 年(因为 country_pop 的值在所有匹配 {"year": "2016", "country": "France"}
的条目
在我的测试期间,我的 php 脚本使用类似 100mo 的东西来生成我多年来的价值观的时间表,这是不可接受的。我同意我的文档结构不是很好,但我无法控制它。
是否有任何解决方案来做类似
select country_pop ... groupBy("country", "year") 以获得所需的最少结果 ?
我在 doctrine mongodb odm 文档中找到了组查询:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html#group-queries 但没有真正的解释。
另外 "group" 方法 https://docs.mongodb.com/v3.2/reference/method/db.collection.group/ 的 mongo 文档似乎被用来做一些聚合,如求和或计数,这不是我要找的。
初学者试试这个,如果您需要任何其他数据,请告诉我:
db.collectionName.aggregate([
{
$group: {
"_id": {
"Country": "$country",
"Year": "$year",
"CountryPop": "$country_pop"
}
}
}
])
这将按国家、年份和国家人口对您的结果进行分组,并为您的数据集生成以下结果:
{ "_id" : { "Country" : "France", "Year" : 2016, "CountryPop" : 63500000 } }
{ "_id" : { "Country" : "France", "Year" : 2015, "CountryPop" : 63000000 } }
我有一个具有多个层次结构的 MongoDB 集合,例如,我将使用一个包含国家/地区的集合,其中包含城市,每个文档都是针对特定城市的,并且包含国家/地区的人口值和城市(示例中的country_pop和city_pop)这非常简单,我实际上有6个层次结构和大量数据。
[
{
"country": "France",
"city": "Paris",
"country_pop": 63000000,
"city_pop": 2200000,
"year": 2015
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63000000,
"city_pop": 850726,
"year": 2015
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63000000,
"city_pop": 441802,
"year": 2015
},
{
"country": "France",
"city": "Paris",
"country_pop": 63500000,
"city_pop": 2350000,
"year": 2016
},
{
"country": "France",
"city": "Marseille",
"country_pop": 63500000,
"city_pop": 880726,
"year": 2016
},
{
"country": "France",
"city": "Toulouse",
"country_pop": 63500000,
"city_pop": 445802,
"year": 2016
}
]
我目前正在使用 doctrine mongo odm 将我的文档混合到 Php 对象中,但这不是必需的。 我想要实现的是在我的 php 脚本值中显示类似的内容:
- 法国:
- 2015: 63000000
- 2016: 63500000
目前,我得到 all 个匹配 {"country": "France"}
的文档,所以在这个例子中我将得到 6 个条目。但实际上,有大量数据,获得 6 个条目有点不好,我只能得到两个,一个是 2015 年,一个是 2016 年(因为 country_pop 的值在所有匹配 {"year": "2016", "country": "France"}
在我的测试期间,我的 php 脚本使用类似 100mo 的东西来生成我多年来的价值观的时间表,这是不可接受的。我同意我的文档结构不是很好,但我无法控制它。
是否有任何解决方案来做类似 select country_pop ... groupBy("country", "year") 以获得所需的最少结果 ?
我在 doctrine mongodb odm 文档中找到了组查询:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html#group-queries 但没有真正的解释。
另外 "group" 方法 https://docs.mongodb.com/v3.2/reference/method/db.collection.group/ 的 mongo 文档似乎被用来做一些聚合,如求和或计数,这不是我要找的。
初学者试试这个,如果您需要任何其他数据,请告诉我:
db.collectionName.aggregate([
{
$group: {
"_id": {
"Country": "$country",
"Year": "$year",
"CountryPop": "$country_pop"
}
}
}
])
这将按国家、年份和国家人口对您的结果进行分组,并为您的数据集生成以下结果:
{ "_id" : { "Country" : "France", "Year" : 2016, "CountryPop" : 63500000 } }
{ "_id" : { "Country" : "France", "Year" : 2015, "CountryPop" : 63000000 } }