エラーメッセージが示すように、これは複数の2dsphere
があるためです。 インデックスなので、$geoNear
どちらを使用すればよいかわかりません。
この状況では、次のいずれかを実行できます。
- 2番目の地理インデックスを削除する、または
key
を使用する $geoNearドキュメント に記載されているパラメータ :
エラーはドキュメントにも記載されています:
db.collection.getIndexes() を使用できます コレクションで定義されているすべてのインデックスを一覧表示します。
key
の使用例を次に示します。 パラメータ:
> db.test.insert([
{_id:0, loc1:{type:'Point',coordinates:[1,1]}, loc2:{type:'Point',coordinates:[2,2]}},
{_id:1, loc1:{type:'Point',coordinates:[2,2]}, loc2:{type:'Point',coordinates:[1,1]}}
])
次に、2つの2dsphere
を作成します インデックス:
> db.test.createIndex({loc1:'2dsphere'})
> db.test.createIndex({loc2:'2dsphere'})
$geoNear
を実行しています key
を指定せずに エラーを出力します:
> db.test.aggregate({$geoNear:{near:{type:'Point',coordinates:[0,0]},distanceField:'d'}})
...
"errmsg": "more than one 2dsphere index, not sure which to run geoNear on",
...
key: loc1
を使用する loc1
に従って結果を並べ替えます インデックス(_id: 0
_id: 1
の前に来る ):
> db.test.aggregate(
{$geoNear: {
near: {type: 'Point',coordinates: [0,0]},
distanceField: 'd',
key: 'loc1'}})
{ "_id": 0, "loc1": { "type": "Point", "coordinates": [ 1, 1 ] }, "loc2": { "type": "Point", "coordinates": [ 2, 2 ] }, "d": 157424.6238723255 }
{ "_id": 1, "loc1": { "type": "Point", "coordinates": [ 2, 2 ] }, "loc2": { "type": "Point", "coordinates": [ 1, 1 ] }, "d": 314825.2636028646 }
そして、key: loc2
を使用します loc2
に従って結果を並べ替えます インデックス(_id: 1
_id: 0
の前に来る ):
> db.test.aggregate(
{$geoNear: {
near: {type: 'Point',coordinates: [0,0]},
distanceField: 'd',
key: 'loc2'}})
{ "_id": 1, "loc1": { "type": "Point", "coordinates": [ 2, 2 ] }, "loc2": { "type": "Point", "coordinates": [ 1, 1 ] }, "d": 157424.6238723255 }
{ "_id": 0, "loc1": { "type": "Point", "coordinates": [ 1, 1 ] }, "loc2": { "type": "Point", "coordinates": [ 2, 2 ] }, "d": 314825.2636028646 }