问题描述
我正在尝试在聚合管道中使用 $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,"distanceField": "coordinates"}}])
返回以下错误 $geoNear 仅作为管道中的第一阶段有效,即使 $geoNear 是管道中的唯一阶段。知道为什么会这样吗?
使用:
- mongoengine: 0.17.0
- MongoDB 服务器版本:4.4.0
解决方法
如 github 兄弟 ticket 中所述,MongoEngine 实际上是向管道添加阶段,以防您在查询集上定义了跳过/限制/排序或过滤器。这可能是你的情况发生冲突
,一个在 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',35.8245029]).save()
pipeline = [
{"$geoNear": {
"near": {"type": "Point","coordinates": [10.634584,35.8245029]},"distanceField": "c","spherical": True
}}
]
print(list(Aggr.objects.aggregate(*pipeline)))