MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $geoNear-Aggregationspipeline (unter Verwendung der Abfrageoption und Verwendung der $match-Pipelineoperation), die eine unterschiedliche Anzahl von Ergebnissen liefert

Wenige Annahmen:-
1. Angenommen, es gibt 300 Datensätze, die basierend auf dem Standort übereinstimmen.
2. Angenommen, der erste Satz von 100 Ergebnissen enthält kein Pizza-Tag. Die restlichen 200 Dokumente (101 bis 300) haben das Tag Pizza

Abfrage 1:-

  • Es gibt zwei Pipeline-Operationen $geoNear und $match
  • Die Ausgabe der $geoNear-Pipelineoperation ist die Eingabe für die $matchpipeline-Operation
  • $geoNear findet maximal 100 Ergebnisse (von uns festgelegtes Limit) basierend auf dem Standort, sortiert nach nächster bis ferner Entfernung. (Beachten Sie hier, dass die zurückgegebenen 100 Ergebnisse ausschließlich auf dem Standort basieren. Diese 100 Ergebnisse enthalten also kein Dokument mit dem Tag „Pizza“)
  • Diese 100 Ergebnisse werden an die nächste Pipeline-Operation $match gesendet, von wo aus die Filterung erfolgt. Aber da der erste Satz von 100 Ergebnissen kein Tag Pizza hatte, ist die Ausgabe leer

Abfrage 2:-

  • Es gibt nur eine Pipeline-Operation $geoNear
  • In der $geoNear-Pipelineoperation ist ein Abfragefeld enthalten.$geoNear findet maximal 100 Ergebnisse (Grenzwert, den wir angegeben haben), basierend auf dem Standort, sortiert nach Entfernung vom nächsten zum entferntesten, und dem Abfragetag=Pizza
  • Hier werden nun die Ergebnisse von 101 bis 200 als Ausgabe zurückgegeben, da die Abfrage in der Pipeline-Operation $geoNear enthalten ist. Also ein einfacher Satz, den wir sagen, finde alle Dokumente mit Ort [x,y] withtag=pizza.

P.S.:- Die Pipeline-Stufe $group wurde nur hinzugefügt, um die Zählung zu erhalten, und daher haben wir in der Erklärung nicht darüber geschrieben