sql >> Databasteknik >  >> NoSQL >> MongoDB

mer än ett 2dsphere-index, inte säker på vilket geoNear ska köras

Som felmeddelandet angav beror detta på att du har mer än en 2dsphere index, så $geoNear vet inte vilken som ska användas.

I den här situationen kan du antingen:

Felet nämns också i dokumenten:

Du kan använda db.collection.getIndex() för att lista alla index som definierats på samlingen.

Här är ett exempel på hur du använder 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]}}
])

Sedan skapar jag två 2dsphere index:

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

Kör $geoNear utan att ange key kommer att mata ut felet:

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

Använd key: loc1 kommer att sortera resultatet enligt loc1 index (_id: 0 kommer före _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 }

Och med key: loc2 kommer att sortera resultatet enligt loc2 index (_id: 1 kommer före _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 problem med flera insättningar

  2. Fråga på MongoDB GridFS-metadata (Java)

  3. Vad är den grundläggande arkitekturen för en node.js + mongodb-app?

  4. mongoose stringify tar bort tomma element