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

mongodb filtrovat dokumenty s délkou, šířkou a konkrétní vzdáleností

Před zahájením bych přidal dva body-

  1. Při použití mongo vždy vkládejte místa způsobem [délka, šířka]
  2. Uveďte prosím typ geometrie, kterou vkládáte. Podívejte se na mongoDB dokumentace pro více informací o typech.

K vašemu dotazu jsem přidal tři body jako váš dotaz a moje data vypadají níže-

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

Dal jsem typ:"Point", protože toto je vyhrazený klíč pro použití umístění sférického typu v mongo. Navíc jsem přidal [long, lat] pro umístění. Později jsem přidal index 2dSphere na pole loc.

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

Poté jsem provedl níže uvedený dotaz, abych zjistil vzdálenost od 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 }

Výše uvedený dotaz je pouze pro účely testování, abyste věděli vzdálenost. Udává vzdálenost v metrech, takže ji mohu snadno převést na km.

Nyní jsem provedl dotaz níže, abych našel místa od Marathahalli do 10 km. vzdálenost a dosáhl jsem požadovaného výsledku-

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

Našel jsem několik problémů s přístupem, který jste zkoušel-

  • Místa musí být uvedena způsobem [dlouhá, zeměpisná šířka].
  • type:Pro použití umístění typu bodu je nutné zadat "Point". Je to vyhrazené klíčové slovo.
  • Vzdálenost zde bude udávána v metrech. Na několika místech se bere v radiánech i v Mongu. Přečtěte si prosím toto mongoDB doc pro více informací o radiánské vzdálenosti.

Doufám, že vám to pomůže...mějte se hezky...:)




  1. Má MongoDB způsob, jak aktualizovat dokument bez vypuštění existujících prvků, které nejsou obsaženy v datech aktualizace

  2. Následovníci - návrh databáze mongodb

  3. Agregovaný výsledek MongoDB se dvěma různými klíči

  4. Agregační dotaz Mongoose vrátí více než jeden záznam, když by měl vrátit pouze jeden