[英]Mongoengine geo spatial query with text search does not work as expected
以下是我的查询:
items = Item.objects(
location__near=[item_obj.longitude, item_obj.latitude],
location__max_distance=item_obj.range,
status__status=ITEM_STATUS_DISPLAYED
).filter(
Q(title__icontains=item_obj.search) |
Q(description__icontains=item_obj.search
)
).hint([('location', '2dsphere')])
由于返回了超出范围的对象,因此该查询似乎不起作用。 并且项目状态似乎也被忽略了。 范围以米为单位。
奇怪的是,以下查询可以正常工作:
items = Item.objects(
location__near=[item_obj.longitude, item_obj.latitude],
location__max_distance=item_obj.range,
status__status=ITEM_STATUS_DISPLAYED
)
我不确定是怎么了。
我建议您远离$ near句柄,因为mongoengine使用了不推荐使用的PyMongo调用,如果将mongoDB更新到最新版本,则应用程序将失败。
我所做的是使用geo_within查询,尤其是geo_within_sphere,因为我是在围绕地球位置的圆周内找到点。 您可以在此处找到参考: MongoEngine地理查询
他们在那里没有解释的一件事就是转换半径。 如果使用Km,则必须使用radius / 6371.0(如果使用英里),则必须做radius / 3959.0
我的查询如下所示:
data = data_set.objects(
location__geo_within_sphere=[[longitude, latitude], radius/6371.0]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.