MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

повече от един 2dsphere индекс, не съм сигурен кой да стартирам geoNear

Както показва съобщението за грешка, това е защото имате повече от една 2dsphere индекси, така че $geoNear не знае кой да използва.

В тази ситуация можете да:

Грешката е спомената и в документите:

Можете да използвате db.collection.getIndexes() за да изброите всички индекси, дефинирани в колекцията.

Ето пример за използване на key параметър:

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

След това създавам две 2dsphere индекси:

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

Стартира се $geoNear без да посочвате key ще изведе грешката:

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

Използване на key: loc1 ще сортира резултата според loc1 индекс (_id: 0 идва преди _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 }

И използвайки key: loc2 ще сортира резултата според loc2 индекс (_id: 1 идва преди _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. Rails Mongoid не успява да се удостовери - неуспешно с грешка 13:не е оторизиран за заявка в my_db.my_collection

  2. Макс и група в Mongodb

  3. NoClassDefFoundError => ClassPath$JavaContext при използване на стартиране на възпроизвеждане

  4. Настройте персонализирани конвертори в Spring Data Mongo

  5. Express.js - Филтриране на mongodb id в URL адреса