単純なnear
クエリを機能させようとしています。これが私のドキュメントのサンプルです。
{"point":
{"type": "Point",
"coordinates": [30.443902444762696, -84.27326978424058]},
"created_on": {"$date": 1398016710168},
"radius": 180,
"user": {"$oid": "53543188eebc5c0cc416b77c"},
"_id": {"$oid": "53544306eebc5c0ecac6cfba"},
"expires_on": {"$date": 1399831110168}
}
そしてmongodで私はコマンドを試しました:
db.bar.find({point: {$near: [-84.26060492426588, 30.45023887165371]}});
しかし、私はこのエラーを受け取ります:
エラー:{"$ err": "クエリを実行できません:クエリの処理中にエラーが発生しました:ns = foo.bar skip = 0\nTree:GEONEAR field = point maxdist = 1.79769e + 308 isNearSphere = 0 || First:notFirst:full path :ポイント\ nソート:{}\nProj:{}\nプランナーはエラーを返しました:$ geoNearクエリのインデックスが見つかりません "、" code ":17007}
たぶん、今日のグーグルフーはそれほどシャープではないかもしれませんが、何も見つかりませんでした。また、インデックスの確認コマンドを実行しました。私の意図は、これらが地図の場所であることです。
db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});
いくつかの問題、 fooデータベースのfooコレクションにインデックスを作成しましたが、barコレクションを照会しています。あなたは正しいコレクションにいる必要があります。
挿入したドキュメントを読むには、「2dsphere」インデックスを geoJsonオブジェクトをサポート に追加する必要があります。このインデックスはドキュメントの「ポイント」要素にある必要があるため、試してください
db.bar.createIndex({point:"2dsphere"});
その後、クエリにgeoJson objを提供することにより、次のようにクエリを実行できます。
db.bar.find(
{ point :
{ $near :
{
$geometry : {
type : "Point" ,
coordinates : [-84.27326978424058, 30.443902444762696] },
$maxDistance : 1
}
}
}
)
db.prod.createIndex({ "location": "2d" })
これは私にとって同じ問題を解決しました。
Prodは私のコレクション名で、locationは地理的位置を保存する列の名前です(GeoPoint)
同じことに関するいくつかの議論を見つけることができます here
そのため、ここでいくつか間違っているようです。
db.foo.createIndex({geo: "2d"})
現在「geo」というフィールドはなく、データのあるフィールドはその場所にあるはずなので、「失敗」しません。正しいフィールドである「ポイント」を代わりに使用した場合、このタイプのインデックスはGeoJSONデータに対して無効であることを通知するエラーを受け取ります。 「2dsphere」インデックスが必要です:
db.points.createIndex({ "point": "2dsphere" })
db.points.find({point:{ $ near:{ $ geometry:{ type: "Point"、 座標:[-84.26060492426588、30.45023887165371] } } }})
$near
のドキュメントを参照してください
上記の回答に加えて、すでにインデックスを作成しようとして、構文またはフィールドが間違っている場合は、次を実行できます。
db.<yourcollection>.dropIndexes();
すべてのインデックスをクリーンアップし、適切に再作成します。
また、インデックスは、座標自体ではなく、「座標」の親に作成する必要があります。
_{
"_id": 59ac03d168eaaa14c2a57a00",
"location":{
"type":"Point",
"coordinates":[
131.6667,
57.8368
]
},
"age":53,
"username":"Brandi_Greenfelder"
}
_
db.<yourcollection>.createIndex({ location: '2dsphere' });
注意、 "2d"と "2dsphere"があり、2番目は新しいものとして使用します。