MongoDB中的聚合复杂性
我有一个查询,它根据Vesser_id的值对结果大数据集~=11Gb进行分组,并为每个Vesser返回数组中的坐标 查询如下所示:MongoDB中的聚合复杂性,mongodb,aggregate,pymongo,Mongodb,Aggregate,Pymongo,我有一个查询,它根据Vesser_id的值对结果大数据集~=11Gb进行分组,并为每个Vesser返回数组中的坐标 查询如下所示: pipeline = [{"$group": {"_id": "$properties.vessel_id", "COORDINATES": { "$push": "$geometry
pipeline = [{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}}]
getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)
输出为:
{u'_id': u'566679000', u'COORDINATES': [[154.666, -16.643], [154.666, -16.643], [154.666, -16.643]]}
{u'_id': u'636015725', u'COORDINATES': [[151.5162, -9.44365], [151.5162, -9.44365], [151.5162, -9.44365]]}
{u'_id': u'525018017', u'COORDINATES': [[117.3803, -1.029925], [117.3803, -1.029925], [117.3803, -1.029925]]}
数据集总共包含41000个船舶id。我观察到,获取所有船只输出的时间几乎等于获取500艘船只输出的时间
例如,使用$limit:500执行查询的时间几乎等于使用$limit:41000执行查询的时间:
时间:720秒
时间:780秒
我错过了什么?是我做错了什么吗?参见示例
db.collection.distinct('vessel_id').limit(10000)
db.collection.aggregate([
{ $match: { vessel_id: vessel_id }},
{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}}
])
@尼尔·伦,谢谢你的回复。我刚到蒙哥。那么你告诉我,要在查询的前面加上限制吗?请阅读上面的内容。我不知道你想做什么。你需要更好地解释。但这里发生的一切都是应该发生的,因为这就是你要求它做的。我的问题是,为什么我在获取所有船只的坐标和获取500艘船只的坐标时,都要同时观察。当然,我提出的问题可能是错误的。请再读第一行。所有的工作都在$group中完成。更改返回的游标结果的$limit无效。这就是它的工作原理。刷新此页面,因为您可能只阅读了部分详细信息。@Antonis$limit对$group stage没有影响。。。你需要把$limit阶段放在$group阶段之前。这是一个成本高昂的解决方案,不适合我的情况,但仍然是一个解决方案。@Antonis这会减少查询时间吗?或者增加?这个db.collection.distinct'vessel_id'.limit10000我想这是要花费的。做distinct 10000有什么意义,如果聚合返回单个vessel_id的坐标?@Antonis如果这个解决方案不适合你,那么你可以取消它的标记,这样人们就会访问页面。。。你可能会得到你的答案。。。
pipeline = [{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}},
{"$limit":41000}]
getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)
db.collection.distinct('vessel_id').limit(10000)
db.collection.aggregate([
{ $match: { vessel_id: vessel_id }},
{"$group": {"_id": "$properties.vessel_id",
"COORDINATES": {
"$push": "$geometry.coordinates"}}}
])