我尝试使用PointField
在flask
应用中更新upsert_one
。但它总是插入新文档。我知道问题出在我正在传递的查询中。
以下是我的模特。
class Location(db.Document):
location_name = db.StringField(required=True)
geoCoords = db.PointField()
更新查询。
Location.objects(geoCoords=loc["geoCoords"]).upsert_one(location_name=loc["location_name"], geoCoords=loc["geoCoords"])
#loc["geoCoords"] = [77.6309395,12.9539974]
我也尝试过get
。但是我收到以下查询的错误消息"Location matching query does not exist."
。
loc = Location.objects(geoCoords=[77.6309395,12.9539974]).get()
我的location
集合中有以下条目。
> db.location.find()
{ "_id" : ObjectId("59c5019727bae70ad3259e67"), "geoCoords" : { "type" : "Point", "coordinates" : [ 77.6309395, 12.9539974 ] }, "location_name" : "Bengaluru" }
{ "_id" : ObjectId("59c5022d27bae70ad3259ea2"), "geoCoords" : { "type" : "Point", "coordinates" : [ 77.6309395, 12.9539974 ] }, "location_name" : "Bengaluru" }
>
我找不到有关查询PointFiled
的任何相关信息。
答案 0 :(得分:1)
回答我的问题。我认为没有办法像我在问题中提到的那样得到确切的观点。
这里最近的方法是使用__near
选择器。这接受meters
中的范围。因此,您可以根据您的要求提供最接近的范围查询。
在我的情况下,我给了100米。哪个对我好。
示例:
Location.objects(geoCoords__near=thelocation["geoCoords"], geoCoords__max_distance=100).upsert_one(location_name=thelocation["location_name"], geoCoords=thelocation["geoCoords"])
答案 1 :(得分:0)
试试这个:
Location.objects(geoCoords="...").update(location_name=loc["location_name"], geoCoords=loc["geoCoords"])