sql >> Databáze >  >> NoSQL >> MongoDB

více než jeden index 2dsphere, nevím, který spustit geoNear

Jak naznačuje chybová zpráva, je to proto, že máte více než jeden 2dsphere indexy, takže $geoNear neví, který z nich použít.

V této situaci můžete:

  • přetáhněte druhý geografický index nebo
  • použijte key parametr uvedený v dokumentaci $geoNear :

Chyba je zmíněna i v dokumentech:

Můžete použít db.collection.getIndexes() vypíše všechny indexy definované v kolekci.

Zde je příklad použití key parametr:

> 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]}}
])

Poté vytvořím dvě 2dsphere indexy:

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

Spuštění $geoNear bez zadání key vypíše chybu:

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

Pomocí key: loc1 seřadí výsledek podle loc1 index (_id: 0 je před _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 }

A pomocí key: loc2 seřadí výsledek podle loc2 index (_id: 1 je před _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. Mohu volat rs.initiate() a rs.Add() z node.js pomocí ovladače MongoDb?

  2. Jak načíst podrobnosti z mongo db a odeslat nebo uložit do objektu v metodě nodejs Fork

  3. TypeError:Nelze přečíst vlastnost 'items' null v monogdb pomocí nodejs

  4. Jak poznám velikost mého dokumentu uvnitř MongoDB s ruby ​​driverem