Seperti yang ditunjukkan oleh pesan kesalahan, ini karena Anda memiliki lebih dari satu 2dsphere
indeks, jadi $geoNear
tidak tahu mana yang harus digunakan.
Dalam situasi ini, Anda dapat:
- lepaskan indeks geografis kedua, atau
- gunakan
key
parameter seperti yang disebutkan dalam dokumentasi $geoNear :
Kesalahan juga disebutkan dalam dokumen:
Anda dapat menggunakan db.collection.getIndexes() untuk membuat daftar semua indeks yang ditentukan pada koleksi.
Berikut ini contoh penggunaan key
parameter:
> 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]}}
])
Lalu saya membuat dua 2dsphere
indeks:
> db.test.createIndex({loc1:'2dsphere'})
> db.test.createIndex({loc2:'2dsphere'})
Menjalankan $geoNear
tanpa menentukan key
akan menampilkan kesalahan:
> 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",
...
Menggunakan key: loc1
akan mengurutkan hasil menurut loc1
indeks (_id: 0
datang sebelum _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 }
Dan, menggunakan key: loc2
akan mengurutkan hasilnya sesuai dengan loc2
indeks (_id: 1
datang sebelum _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 }