Du har två alternativ här. Den första är att använda $where
operatör.
Collection.find( { $where: "this.start === this.end" } )
Det andra alternativet är att använda aggregeringsramverket och $redact
operatör.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where
operatorn gör en JavaScript-utvärdering och kan inte dra nytta av index så fråga med $where
kan orsaka sämre prestanda i din applikation. Se överväganden
. Om du använder $where kommer vart och ett av dina dokument att konverteras från BSON till JavaScript-objekt före $where-operationen, vilket kommer att orsaka sämre prestanda. Naturligtvis kan din fråga förbättras om du har ett indexfilter. Det finns också en säkerhetsrisk om du bygger din fråga dynamiskt baserat på användarinmatning.
$redact
som $where
använder inte index och utför ens en samlingsskanning, men din frågeprestanda förbättras när du $redact
eftersom det är en standard MongoDB-operatörer. Som sagt är aggregeringsalternativet mycket bättre eftersom du alltid kan filtrera ditt dokument med $match-operatorn.
$where
här är bra men kan undvikas. Jag tror också att du bara behöver $where
när du har ett schemadesignproblem. Att till exempel lägga till ytterligare ett booleskt fält till dokumentet med index kan vara ett bra alternativ här.