sql >> Database teknologi >  >> NoSQL >> MongoDB

mere end ét 2dsphere-indeks, ikke sikker på hvilket geoNear skal køre

Som fejlmeddelelsen angav, skyldes det, at du har mere end én 2dsphere indekser, så $geoNear ved ikke, hvilken der skal bruges.

I denne situation kan du enten:

Fejlen er også nævnt i dokumenterne:

Du kan bruge db.collection.getIndexes() for at liste alle indekser defineret på samlingen.

Her er et eksempel på brug af 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]}}
])

Så opretter jeg to 2dsphere indekser:

> db.test.createIndex({loc1:'2dsphere'})
> db.test.createIndex({loc2:'2dsphere'})

Kører $geoNear uden at angive key vil udsende fejlen:

> 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",
...

Brug key: loc1 vil sortere resultatet efter loc1 indeks (_id: 0 kommer før _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 }

Og ved at bruge key: loc2 vil sortere resultatet efter loc2 indeks (_id: 1 kommer før _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. Rails og caching, er det nemt at skifte mellem memcache og redis?

  2. Forskelle mellem Microsoft.Extensions.Cashing.Redis og Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache

  3. Få forskellige ISO-datoer efter dage, måneder, år

  4. Hvordan håndterer MongoDB dokumentlængde i et tekstindeks og tekstscore?