MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Pipeline di aggregazione MongoDB $geoNear (usando l'opzione query e usando l'operazione di pipeline $match) che fornisce un numero diverso di risultati

Poche ipotesi:-
1. Supponiamo che ci siano 300 record che corrispondono in base alla posizione.
2. Supponiamo che il primo set di 100 risultati non abbia tag pizza. I restanti 200 documenti (da 101 a 300) hanno il tag pizza

Query 1:-

  • Ci sono 2 operazioni di pipeline $geoNear e $match
  • L'output dell'operazione di $geoNear pipeline è l'input dell'operazione di $matchpipeline
  • $geoNear trova un massimo di 100 risultati (limite che abbiamo specificato) in base alla posizione ordinata dalla distanza più vicina a quella lontana. (Nota qui che i 100 risultati restituiti sono puramente basati sulla posizione. Quindi questi 100 risultati non contengono alcun documento con tag "pizza")
  • Questi 100 risultati vengono inviati alla successiva operazione di pipeline $match da dove avviene il filtraggio. Ma poiché il primo set di 100 risultati non aveva il tag pizza, l'output è vuoto

Query 2:-

  • C'è solo 1 operazione di pipeline $geoNear
  • C'è un campo di query incluso nell'operazione della pipeline $geoNear$geoNear trova un massimo di 100 risultati (limite che abbiamo specificato) in base alla posizione ordinata per distanza più vicina e lontana e querytag=pizza
  • Ora qui i risultati da 101 a 200 vengono restituiti come output poiché la query è inclusa nell'operazione di pipeline $geoNear. Quindi frase semplice diciamo, trova tutti i documenti con posizione [x,y] withtag=pizza.

P.S:- La fase della pipeline $group è stata aggiunta solo per ottenere il conteggio e quindi non ne ho scritto nella spiegazione