MongoDB中的聚合复杂性

问题描述 投票:1回答:1

我有一个查询将结果(大数据集〜= 11Gb)按值(vessel_id)分组,并为每个容器返回数组中的坐标。

查询如下所示:

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个vessel_id。我观察到,获取所有容器的输出的时间几乎与获取500个容器的输出的时间相等。

例如,使用$limit:500执行查询的时间几乎与使用$limit:41000执行查询的时间相等:

pipeline = [{"$group": {"_id": "$properties.vessel_id",
                "COORDINATES": {                                                                    
                "$push": "$geometry.coordinates"}}},
                 {"$limit":500}]                                                        


getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)

时间:720秒

pipeline = [{"$group": {"_id": "$properties.vessel_id",
                "COORDINATES": {                                                                    
                "$push": "$geometry.coordinates"}}},
                 {"$limit":41000}]                                                        


getPositionsOfshipsgrouped = db.samplecol.aggregate(pipeline, allowDiskUse=True)

时间:780秒

我想念的是什么?是我做错了吗?

mongodb aggregate pymongo
1个回答
-1
投票

看到这个例子

db.collection.distinct('vessel_id').limit(10000)

db.collection.aggregate([
  { $match: { vessel_id: vessel_id }},
  {"$group": {"_id": "$properties.vessel_id",
                "COORDINATES": {                                                                    
                "$push": "$geometry.coordinates"}}}
])
© www.soinside.com 2019 - 2024. All rights reserved.