MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

lebih dari satu indeks 2dsphere, tidak yakin mana yang harus dijalankan geoNear

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 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. sintaks pymongo untuk memperbarui subdokumen

  2. Untuk membiarkan, tidak bertambah jika ada item yang sama dalam array

  3. MongoDB $indexOfBytes

  4. Bagaimana menemukan catatan acak di Mongoose

  5. Ketergantungan gradle tidak berfungsi di IntelliJ