Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB中的聚合复杂性_Mongodb_Aggregate_Pymongo - Fatal编程技术网

MongoDB中的聚合复杂性

MongoDB中的聚合复杂性,mongodb,aggregate,pymongo,Mongodb,Aggregate,Pymongo,我有一个查询,它根据Vesser_id的值对结果大数据集~=11Gb进行分组,并为每个Vesser返回数组中的坐标 查询如下所示: pipeline = [{"$group": {"_id": "$properties.vessel_id", "COORDINATES": { "$push": "$geometry

我有一个查询,它根据Vesser_id的值对结果大数据集~=11Gb进行分组,并为每个Vesser返回数组中的坐标

查询如下所示:

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"}}}
])