Vous avez deux options ici. La première consiste à utiliser le $where
opérateur.
Collection.find( { $where: "this.start === this.end" } )
La deuxième option consiste à utiliser le cadre d'agrégation et le $redact
opérateur.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
Le $where
l'opérateur fait une évaluation JavaScript et ne peut pas tirer parti des index, donc interrogez en utilisant $where
peut entraîner une baisse des performances de votre application. Voir considérations
. Si vous utilisez $where, chacun de vos documents sera converti de BSON en objet JavaScript avant l'opération $where, ce qui entraînera une baisse des performances. Bien sûr, votre requête peut être améliorée si vous avez un filtre d'index. Il existe également un risque de sécurité si vous créez votre requête de manière dynamique en fonction des entrées de l'utilisateur.
Le $redact
comme le $where
n'utilise pas d'index et n'effectue même pas d'analyse de collection, mais les performances de votre requête s'améliorent lorsque vous $redact
car il s'agit d'un opérateur MongoDB standard. Cela étant dit, l'option d'agrégation est bien meilleure car vous pouvez toujours filtrer votre document à l'aide de l'opérateur $match.
$where
ici c'est bien mais pourrait être évité. Aussi, je crois que vous n'avez besoin que de $where
lorsque vous avez un problème de conception de schéma. Par exemple, ajouter un autre champ booléen au document avec index peut être une bonne option ici.