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

mongodb филтърни документи с дължина, ширина и конкретно разстояние

Преди да започна бих добавил две точки-

  1. Когато използвате mongo, винаги вмъквайте местоположения по [long., lat.] начин
  2. Моля, посочете типа на геометрията, която вмъквате. Вижте mongoDB документация за повече информация относно типовете.

Стигайки до вашата заявка, добавих три точки като въпрос и данните ми изглеждат по-долу-

> db.test.find()
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ] }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ] }

Дадох тип:„Точка“, защото това е запазен ключ за използване на местоположения от сферичен тип в mongo. Освен това добавих [long, lat] за местоположение. По-късно добавих 2dSphere индекс към полето loc.

db.test.createIndex({loc:"2dsphere"})

След това изпълних заявката по-долу, за да знам разстоянието от Marathahalli [77.6974,12.9591]-

> db.test.aggregate([ {$geoNear: { near :{type: "Point", coordinates:[77.6974,12
.9591]}, distanceField: "distance", spherical: true } } ])
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ], "distance": 9583.305405402776 }
{ "_id" : "ShanthiNgr", "type" : "Point", "loc" : [ 77.6836, 12.8486 ], "distance" : 12391.53898270671 }
{ "_id" : "Majestic", "type" : "Point", "loc" : [ 77.5712, 12.9766 ], "distance": 13828.057829128267 }

Горната заявка е само с цел тестване, за да се знае разстоянието. Показва разстоянието в метри, така че мога лесно да го конвертирам в километри.

Сега пуснах по-долу заявка, за да намеря местоположения от Marathahalli в рамките на 10 км. разстояние и постигнах желания резултат-

> db.test.find({ loc:{ $near:{ $geometry: {type: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
{ "_id" : "madiwala", "type" : "Point", "loc" : [ 77.6174, 12.9226 ] }

Открих няколко проблема с подхода, който опитвате-

  • Местоположенията трябва да бъдат посочени по [long, lat] начин.
  • тип:"Точка" трябва да бъде зададена за използване на местоположение тип точка. Това е запазена ключова дума.
  • Тук разстоянието ще бъде взето в метри. На няколко места се приема и в радиани в Монго. Моля, вижте това mongoDB doc за повече информация относно радианното разстояние.

Надяваме се, че ще ви помогне...приятен ден...:)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Грешка:Не може да се прочете свойството 'close' на null

  2. Използване на MongoDB за съхраняване на неизменни данни?

  3. Журналирането на MongoDB гарантира ли издръжливост?

  4. Как да намерите неизползвани индекси в MongoDB?

  5. Грешка при дублиране на ключ с уникален индекс на mongodb 2dsphere