MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

nhiều hơn một chỉ mục 2dsphere, không chắc chắn cái nào sẽ chạy geoNear

Như thông báo lỗi đã chỉ ra, điều này là do bạn có nhiều hơn một 2dsphere chỉ mục, vì vậy $geoNear không biết sử dụng cái nào.

Trong tình huống này, bạn có thể:

  • giảm chỉ mục địa lý thứ hai hoặc
  • sử dụng khóa key tham số như đã đề cập trong tài liệu $ geoNear :

Lỗi cũng được đề cập trong tài liệu:

Bạn có thể sử dụng db.collection.getIndexes () để liệt kê tất cả các chỉ mục được xác định trên bộ sưu tập.

Đây là một ví dụ về việc sử dụng khóa key tham số:

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

Sau đó, tôi tạo hai 2dsphere chỉ mục:

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

Đang chạy $geoNear mà không chỉ định key sẽ xuất ra lỗi:

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

Sử dụng khóa key: loc1 sẽ sắp xếp kết quả theo loc1 chỉ mục (_id: 0 đứng trước _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 }

Và, sử dụng key: loc2 sẽ sắp xếp kết quả theo loc2 chỉ mục (_id: 1 đứng trước _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. Cách tốt nhất để xử lý các khóa compsite khi sử dụng Salat với MongoDB là gì?

  2. Cách loại trừ một số trường khỏi tài liệu

  3. Làm cách nào để đặt tài liệu _id thành db trong Mongoose?

  4. Tuần tự hóa MongoDB find () trả về thành mảng JSON không ẩn danh, sử dụng PyMongo

  5. Web Scraping và Crawling với Scrapy và MongoDB