我正在尝试在聚合管道中使用 $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 是管道中的唯一阶段。知道为什么会这样吗?
使用:
答案 0 :(得分:0)
如 github 兄弟 ticket 中所述,MongoEngine 实际上是向管道添加阶段,以防您在查询集上定义了跳过/限制/排序或过滤器。这可能是你的情况发生冲突
答案 1 :(得分:0)
一个在 mongoengine 下运行的 $geoNear 示例。
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)))