2017-09-26 3 views
0

私はflaskアプリでPointFieldupsert_oneで更新しようとしていました。しかし、常に新しい文書を挿入します。私は問題が私が渡しているクエリであることを知っています。質問するにはここをクリックPointField - MongoEngine

以下は私のモデルです。

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

は私の質問に答えるために。私は質問の中で言及したような正確な点を得る方法がないと思う。

ここで最も近い方法は、セレクタ__nearを使用することです。これはmetersの範囲を受け入れます。したがって、あなたの要件に応じて最も近い範囲のクエリを与えることができます。

私の場合、私は100メートルを与えました。それは私のためにうまくいく。

例: `Location.objects(geoCoords = LOC [ "geoCoords"])` `戻り場所マッチングクエリはexist.`ないため動作していないupsert_one`

Location.objects(geoCoords__near=thelocation["geoCoords"], geoCoords__max_distance=100).upsert_one(location_name=thelocation["location_name"], geoCoords=thelocation["geoCoords"]) 
0

これを試してみてください:

Location.objects(geoCoords="...").update(location_name=loc["location_name"], geoCoords=loc["geoCoords"]) 
+0

'。したがって、 'update'も同様です。 – james

関連する問題