MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Geonear sortuj według odległości i czasu

Prawidłowe zapytanie do użycia w tym miejscu korzysta z struktury agregacji który ma $geoNear etap rurociągu, aby pomóc w tym. Jest to również jedyne miejsce, w którym można „sortować” według wielu kluczy, ponieważ niestety „geoprzestrzenna” $nearSphere nie ma projekcji "meta" dla "odległość", jak $text ma „wynik”.

Również geoNear polecenie bazy danych, którego używasz, nie może być również używane z "kursorem" .sort() w ten sposób.

db.paging.aggregate([
    { "$geoNear": {
        "near": [106.606033,29.575897 ],
        "spherical": true,
        "distanceField": "distance",
        "distanceMuliplier": 6371,
        "maxDistance": 1/6371
    }},
    { "$sort": { "distance": 1, "createdate": -1 } },
    { "$skip": ( 2-1 ) * 2 },
    { "$limit": 5 }
])

To odpowiednik tego, co próbujesz zrobić.

W ramach agregacji używasz "operatorów potoku" zamiast "modyfikatorów kursora" do robienia rzeczy takich jak $sort , $skip i $limit . Również te muszą być w porządku logicznym, podczas gdy modyfikatory kursora zazwyczaj to rozwiązują.

Jest to „rurociąg”, podobnie jak „rurka uniksowa”. |

Uważaj także na "maxDistance" i "distanceMuliplier". Ponieważ Twoje współrzędne znajdują się w „starszych parach współrzędnych”, a nie w GeoJSON w formacie, odległości są mierzone w radianach. Jeśli masz zapisane dane lokalizacji GeoJSON, wynik jest zwracany w „metrach”.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. jak uczynić zmienną unikalnym kluczem w manguście?

  2. Filtruj wyniki według wartości pola ostatniego wpisu w tablicy

  3. Operacja zbiorcza MongoDb pobierz identyfikator

  4. Importowanie kolekcji mongo do istniejącej kolekcji bez jej zastępowania

  5. Używanie deklaracji nie znalezionej w sterowniku mongodb c++