以下是我的疑问:
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
)
我不确定是什么问题。
答案 0 :(得分:0)
我建议您远离$ near句柄,因为mongoengine正在使用对PyMongo的弃用调用,如果您将mongoDB更新到最新版本,您的应用程序将失败。
我所做的是使用geo_within查询,特别是geo_within_sphere,因为我在地球上的位置周围的圆圈内找到点。您可以在此处找到参考:MongoEngine geo query
他们在那里解释的一件事是转换半径。如果你使用Km,那么你必须做半径/ 6371.0如果你使用里程然后半径/ 3959.0
我的查询如下:
data = data_set.objects(
location__geo_within_sphere=[[longitude, latitude], radius/6371.0]
)