Masz tutaj dwie opcje. Pierwszym z nich jest użycie $where
operatora.
Collection.find( { $where: "this.start === this.end" } )
Drugą opcją jest użycie struktury agregacji i $redact
operatora.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where
operator wykonuje ocenę JavaScript i nie może korzystać z indeksów, więc zapytanie za pomocą $where
może spowodować spadek wydajności aplikacji. Zobacz rozważania
. Jeśli użyjesz $where, każdy Twój dokument zostanie przekonwertowany z obiektu BSON na obiekt JavaScript przed operacją $where, co spowoduje spadek wydajności. Oczywiście zapytanie można poprawić, jeśli masz filtr indeksu. Istnieje również zagrożenie bezpieczeństwa, jeśli tworzysz zapytanie dynamicznie w oparciu o dane wprowadzone przez użytkownika.
$redact
jak $where
nie używa indeksów, a nawet wykonuje skanowanie kolekcji, ale wydajność zapytania poprawia się, gdy $redact
ponieważ są to standardowe operatory MongoDB. Biorąc to pod uwagę, opcja agregacji jest znacznie lepsza, ponieważ zawsze możesz filtrować swój dokument za pomocą operatora $match.
$where
tutaj jest w porządku, ale można tego uniknąć. Uważam też, że potrzebujesz tylko $where
gdy masz problem z projektowaniem schematu. Na przykład dodanie kolejnego pola logicznego do dokumentu z indeksem może być tutaj dobrą opcją.