[英]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.