Du har to muligheder her. Den første er at bruge $where
operatør.
Collection.find( { $where: "this.start === this.end" } )
Den anden mulighed er at bruge aggregeringsrammen og $redact
operatør.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where
operatør laver en JavaScript-evaluering og kan ikke drage fordel af indekser, så forespørg ved hjælp af $where
kan forårsage et fald i ydeevnen i din applikation. Se overvejelser
. Hvis du bruger $where, vil hvert af dine dokumenter blive konverteret fra BSON til JavaScript-objekt før $where-operationen, hvilket vil forårsage et fald i ydeevnen. Selvfølgelig kan din forespørgsel forbedres, hvis du har et indeksfilter. Der er også en sikkerhedsrisiko, hvis du opbygger din forespørgsel dynamisk baseret på brugerinput.
$redact
ligesom $where
bruger ikke indekser og udfører endda en samlingsscanning, men din forespørgselsydeevne forbedres, når du $redact
fordi det er en standard MongoDB-operatører. Når det er sagt, er aggregeringsmuligheden langt bedre, fordi du altid kan filtrere dit dokument ved hjælp af $match-operatoren.
$where
her er fint, men kunne undgås. Jeg tror også, at du kun behøver $where
når du har et skemadesignproblem. For eksempel kan tilføjelse af endnu et boolesk felt til dokumentet med indeks være en god mulighed her.