Geo2Dインデックスとしてレガシコーディネートペアを持つジオスペースmongodbがあります。このデータベースから、私は場所のリスト(レガシコーディネートペア)を抽出したいと思います。通常の列では、以下のように可能なペアのリストに対して「$ in」クエリを使用できます。MongoDBで2dまたは2dsphereのインデックス付きフィールドで通常のクエリを使用する方法
>>> db.collection.find_one({'country': {'$in': ['Argentina', 'Chile']}})
私はlocカラムでこれを行う方法がわかりません。 loc列の同様の操作でエラーが発生する
>>> db.collection.find_one({'loc': {'$in': [(-35, 20), (-30, 21)]}})
geo field only has 1 element :: caused by :: $in: [ [ -35, 20 ], [ -30, 21 ] ]
解決方法は、リストの各メンバーを個別に照合することです。しかし、おそらく最も効果的な解決策ではありません。私ができるアグリゲーション/マップ・リダクション・トリックはありますか?
関連情報DBがどのように見える
:
>>> db.collection.find_one()
{u'value': 2.7062699269224995,
u'_id': ObjectId('56cf807e54013b935b88d3da'),
u'country': u'Algeria',
u'date': datetime.datetime(2015, 1, 1, 0, 0),
u'iso2': u'DZ',
u'lat': 27.0,
u'loc': [27.0, -8.0],
u'lon': -8.0,
u'place': u'27.0_-8.0_DZ'}
インデックス・キーは、次のとおりです。
[ { "_id" : 1 }, { "date" : -1 }, { "loc" : "2d" } ]
ここで実際に実行しているクエリは本当ですか?指定された引数に「正確に」一致する配列に対しては、規則的な一致でなければならないため、「地理空間」はありません。これはどのMongoDBサーバーのバージョンですか? 2.6.xより前のものは、エンジンがそのリリースで大幅な変更を行ったため、インデックスの処理方法について「混乱」している可能性があります。 –
インデックスは地理空間的なものなので、依然として$近いクエリを実行したいと考えています。私のクエスチョンを言い換えると、2dインデックスのクエリで$です。これはmongodbです。2.4.9 – goofd
MongoDB 2.4を使用しているので、私が作成していたポイントは、エラーの原因となるクエリエンジンの処理に違いがあります。 –