Javascript MongoDB find$near和aggregate$geoNear返回不同的结果

Javascript MongoDB find$near和aggregate$geoNear返回不同的结果,javascript,mongodb,Javascript,Mongodb,为什么find和aggregate在这里返回不同数量的文档? 我没有胶水为什么。这是个bug还是我做错了什么? 我为mongo db shell编写了这段代码。我只查找距离给定位置一定半径内的文档。 geojson_loc是一个2dsphere索引,是此集合上唯一的索引。谢谢任何可能解释我在这里做错了什么的解释 代码: 结果是: 所有文件:25000份 搜索结果:13000 合计:4000 我希望: 所有文件:25000份 搜索结果:13000 合计:13000 或: 所有文件:25000份 搜

为什么find和aggregate在这里返回不同数量的文档? 我没有胶水为什么。这是个bug还是我做错了什么? 我为mongo db shell编写了这段代码。我只查找距离给定位置一定半径内的文档。 geojson_loc是一个2dsphere索引,是此集合上唯一的索引。谢谢任何可能解释我在这里做错了什么的解释

代码:

结果是: 所有文件:25000份 搜索结果:13000 合计:4000

我希望: 所有文件:25000份 搜索结果:13000 合计:13000 或: 所有文件:25000份 搜索结果:4000 合计:4000

编辑:
如果我在没有聚合的情况下运行$geoNear,它将返回与聚合中相同数量的文档。返回的文档大小为88MB,可能超过了可返回的最大BSON文档大小的16MB限制。有没有办法在聚合中使用$geoNear而不受大小限制,或者$near据我所知根本不可能

我看到您在聚合阶段使用$geoNear。尝试在没有聚合的情况下使用它,看看它会返回什么?如果在聚合或不聚合中同时使用geoNear和near,这将是一个公平的比较。在不使用聚合框架的情况下使用$geoNear。好的,我试过了,我想问题是$geoNear返回的单个文档限制在最大BSON大小。返回的文件为88MB,作为平面JSON,这可能超过bson.Yes的16MB最大文档大小。你说得对$geoNear限制为16MB。您可以尝试仅投影绝对需要的字段。这将在一定程度上帮助您减轻大小限制。
db = new Mongo("localhost").getDB("dbname");
print("All docs:"+db.coll.find().count())

docs = db.coll.find({"geojson_loc":{"$near" :{"$geometry":{"type":"Point", 
    "coordinates": [11.575433, 48.137289]}, "$maxDistance" : 20000.0 }}}).count()
print("with find:"+docs)

cc = db.coll.aggregate({'$geoNear': {'spherical': true, 'limit': 1500000, 
'near': {'type': 'Point', 'coordinates': [11.575433, 48.137289]}, 'maxDistance': 20000.0, 'distanceField':
'temp.distance'}})
count = 0;

cc.forEach(function(doc){
count++;});

print("with aggregate:"+ count);