Je hebt hier twee opties. De eerste is om de $where
te gebruiken
telefoniste.
Collection.find( { $where: "this.start === this.end" } )
De tweede optie is om het aggregatieraamwerk en de $redact
telefoniste.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
De $where
operator voert een JavaScript-evaluatie uit en kan geen gebruik maken van indexen, dus zoek op met $where
kan leiden tot prestatieverlies in uw toepassing. Zie overwegingen
. Als u $where gebruikt, wordt elk van uw documenten geconverteerd van BSON naar JavaScript-object vóór de $where-bewerking, waardoor de prestaties afnemen. Natuurlijk kan uw zoekopdracht worden verbeterd als u een indexfilter heeft. Er is ook een beveiligingsrisico als u uw zoekopdracht dynamisch bouwt op basis van gebruikersinvoer.
De $redact
zoals de $where
gebruikt geen indexen en voert zelfs een collectiescan uit, maar uw queryprestaties verbeteren wanneer u $redact
omdat het een standaard MongoDB-operator is. Dat gezegd hebbende, is de aggregatie-optie veel beter omdat u uw document altijd kunt filteren met de $ match-operator.
$where
hier is prima, maar kan worden vermeden. Ik geloof ook dat je alleen $where
. nodig hebt wanneer u een probleem hebt met het ontwerpen van een schema. Het toevoegen van een ander booleaans veld aan het document met index kan hier bijvoorbeeld een goede optie zijn.