To wcale nie jest „to samo” zapytanie. Istnieje wyraźna różnica w używaniu oddzielnego $match
etap, ponieważ „filtrowanie” odbywa się dopiero „po” znalezieniu „najbliższych wyników”. Oznacza to, że potencjalnie zwracasz „mniej” wyników, ponieważ kryteria nie są wystawiane razem.
Dlatego istnieje "zapytanie"
opcja w $geoNear
:
db.place.aggregate(
[
{
$geoNear: {
spherical: true,
near: { type: "Point", coordinates: [ 18.416145, -33.911973 ] },
distanceField: "dist",
query: {
"schedule.key": { "$eq": "vo4lRN_Az0uwOkgBzOERyw" }
}
}
}
])
Teraz to samo zapytanie. Albo byłoby dokładnie tak samo, gdybyś użył $nearSphere
. Ponieważ $near
nie uwzględnia krzywizny ziemi w obliczeniach odległości. $nearSphere
i $geoNear
tak.
Ale głównym punktem jest łączenie z "zapytanie"
opcja, ponieważ jest to jedyny sposób, w jaki naprawdę oba kryteria są brane pod uwagę w początkowym wyszukiwaniu.