在mongoengine中聚合返回$geoNear只在管道的第一阶段有效



我试图在聚合管道中使用$geoNear

从mongo shell中运行同样可以:

db.base_model.aggregate([{$geoNear: {near: {type: "Point", coordinates: [10.634584, 35.8245029]}, distanceField: "coordinates"}}]).

但是像这样使用mongoengine

model.objects.aggregate(*[{"$geoNear": {"near": {"type": "Point", "coordinates": [10.634584, 35.8245029]}, "distanceField": "coordinates"}}]) 

返回以下错误$geoNear仅作为管道中的第一阶段有效即使$geoNear是管道中的唯一阶段。知道为什么会这样吗?

使用:

  • mongoengine: 0.17.0
  • MongoDB服务器版本:4.4.0

正如github同胞票中所解释的那样,如果您在查询集上定义了跳过/限制/排序或过滤器,那么MongoEngine实际上是在管道中添加阶段。这可能就是你的情况

A working$geoNearmongoengine下工作的示例。

from mongoengine import *
connect()

class Aggr(Document):
name = StringField()
c = PointField()

Aggr(name='X', c=[10.634584, 35.8245029]).save()
Aggr(name='Y', c=[10.634584, 35.8245029]).save()
pipeline = [
{"$geoNear": {
"near": {"type": "Point", "coordinates": [10.634584, 35.8245029]}, "distanceField": "c",
"spherical": True
}}
]
print(list(Aggr.objects.aggregate(*pipeline)))

最新更新