Sie haben hier zwei Möglichkeiten. Die erste ist die Verwendung von $where
Betreiber.
Collection.find( { $where: "this.start === this.end" } )
Die zweite Option besteht darin, das Aggregationsframework und den $redact
Betreiber.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
Das $where
-Operator führt eine JavaScript-Evaluierung durch und kann Indexe nicht nutzen, also fragen Sie mit $where
ab kann zu einem Leistungsabfall in Ihrer Anwendung führen. Siehe Überlegungen
. Wenn Sie $where verwenden, wird jedes Ihrer Dokumente vor der $where-Operation von BSON in ein JavaScript-Objekt konvertiert, was zu einem Leistungsabfall führt. Natürlich kann Ihre Abfrage verbessert werden, wenn Sie einen Indexfilter haben. Außerdem besteht ein Sicherheitsrisiko, wenn Sie Ihre Abfrage dynamisch basierend auf Benutzereingaben erstellen.
Der $redact
wie $where
verwendet keine Indizes und führt sogar einen Sammlungsscan durch, aber Ihre Abfrageleistung verbessert sich, wenn Sie $redact
ausführen weil es sich um einen Standard-MongoDB-Operator handelt. Davon abgesehen ist die Aggregationsoption weitaus besser, da Sie Ihr Dokument immer mit dem $match-Operator filtern können.
$where
hier ist in Ordnung, könnte aber vermieden werden. Ich glaube auch, dass Sie nur $where
brauchen wenn Sie ein Schemaentwurfsproblem haben. Hier kann beispielsweise das Hinzufügen eines weiteren booleschen Felds zum Dokument mit Index eine gute Option sein.