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

MongoDB $geoNear potok agregacji (przy użyciu opcji zapytania i operacji $match potoku) dający różną liczbę wyników

Kilka założeń:-
1. Załóżmy, że istnieje 300 rekordów, które pasują do lokalizacji.
2. Załóżmy, że pierwszy zestaw 100 wyników nie zawiera tagów pizza. Pozostałe 200 dokumentów (od 101 do 300) ma tag pizza

Zapytanie 1:-

  • Istnieją 2 operacje potoku $geoNear i $match
  • Wyjście operacji potoku $geoNear jest danymi wejściowymi operacji $matchpipeline
  • $geoNear znajduje maksymalnie 100 wyników (określony przez nas limit) na podstawie lokalizacji posortowanej według odległości najbliższej do dużej. (Zauważ, że 100 zwróconych wyników jest opartych wyłącznie na lokalizacji. Tak więc te 100 wyników nie zawiera żadnego dokumentu z tagiem „pizza”)
  • Te 100 wyników jest wysyłanych do następnej operacji potoku $match, z której odbywa się filtrowanie. Ale ponieważ pierwszy zestaw 100 wyników nie zawierał tagu pizza, wynik jest pusty

Zapytanie 2:-

  • Istnieje tylko 1 operacja potoku $geoNear
  • W operacji potoku $geoNear znajduje się pole zapytania, a $geoNear znajduje maksymalnie 100 wyników (określony przez nas limit) na podstawie lokalizacji posortowanej według odległości najbliższej do dużej i parametru querytag=pizza
  • Teraz wyniki od 101 do 200 są zwracane jako dane wyjściowe, ponieważ zapytanie jest uwzględnione w operacji potoku $geoNear. Więc proste zdanie, które mówimy, znajdź wszystkie dokumenty z lokalizacją [x,y] withtag=pizza.

PS:- Etap potoku $group jest dodawany tylko po to, aby uzyskać liczbę i dlatego nie pisałem o tym w wyjaśnieniu



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak stronicować z Mongoose w Node.js?

  2. Unikaj pól o wartości null w wyniku, gdy używasz zmiennej $dateFromString w polu

  3. Jak używać $lookup jako INNER JOIN w agregacji MongoDB?

  4. Usuń zagnieżdżone pola ze wszystkich/wielu dokumentów w kolekcji - NodeJS + MongoDB

  5. Mongodb nie może połączyć się z hostem lokalnym, ale może połączyć się z adresem IP hosta lokalnego