MongoDBドキュメント( link )によると、ドキュメントフィールドに地理空間情報を保存する場合、配列または埋め込みドキュメントの2つのオプションがあり、順序は常に経度、緯度である必要があります。
埋め込みドキュメントを使用する場合、フィールドの順序を確認するにはどうすればよいですか?
または、埋め込みドキュメントのフィールドに特定の名前を付ける必要がありますか?
埋め込みドキュメントでは、埋め込みドキュメントのフィールドの名前に関係なく、最初のフィールドには経度の値が含まれ、2番目のフィールドには緯度の値が含まれます。例えば:
db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )
ここでは、xフィールドは経度になります。 yフィールドは緯度です。
よろしく
「すべてのドキュメントは位置データを同じ順序で保存する必要があります。座標系として緯度と経度を使用する場合、常に経度を最初に保存します。MongoDBの2次元球面インデックス演算子は[経度、緯度]の順序のみを認識します。」
MongoDBの地理空間クエリに関する優れた投稿 必要に応じて。
フィールドに名前を付けることをお勧めします:x and y
、 の代わりに longitude/latitude
。更新後、経度と緯度がアルファベット順に並べ替えられるため、逆になります。
地理空間インデックスを使用すると、地理的な場所に基づいて物を見つけることができます。
次の2つのオプションがあります。
2次元では、x
座標とy
座標をもつデカルト平面とさまざまなオブジェクトがあります。
ドキュメントには、ensureIndex({'location':'2d', 'type':1})
で何らかの種類のx
、y
ロケーションを格納する必要があります。
type
(オプション)オプションは、インデックスの方向、つまり昇順または降順を指定します。複合インデックスでもかまいません。
使用例:
近くの場所を見つけるには、次のコマンドを使用します。
_db.collectionName.find({location: {$near:[x,y]}})
_
実際には、これはlimit
を介してよく使用されます。結果をたとえば20に制限するには、.limit(20)
を追加します。
_db.collectionName.find({location: {$near:[x,y]}}).limit(20)
_
MongoDBのドキュメントには、次のことが記載されています。
オブジェクトの座標を指定する、coordinatesという名前のフィールド。緯度と経度の座標を指定する場合は、経度を最初に、次に緯度をリストします:
有効な経度の値は、-180〜180の範囲です。有効な緯度の値は-90〜90(両方を含む)です。
MongoDBの公式ドキュメント: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes