Tienes dos opciones aquí. El primero es usar el $where
operador.
Collection.find( { $where: "this.start === this.end" } )
La segunda opción es usar el marco de agregación y el $redact
operador.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
El $where
El operador realiza una evaluación de JavaScript y no puede aprovechar los índices, por lo que consulta usando $where
puede causar una caída en el rendimiento de su aplicación. Consulte considerations
. Si usa $where, cada uno de sus documentos se convertirá de BSON a objeto JavaScript antes de la operación $where, lo que provocará una caída del rendimiento. Por supuesto, su consulta se puede mejorar si tiene un filtro de índice. También existe un riesgo de seguridad si está creando su consulta dinámicamente en función de la entrada del usuario.
El $redact
como el $where
no usa índices e incluso realiza un escaneo de colección, pero el rendimiento de su consulta mejora cuando $redact
porque es un operador estándar de MongoDB. Dicho esto, la opción de agregación es mucho mejor porque siempre puede filtrar su documento usando el operador $match.
$where
aquí está bien, pero podría evitarse. También creo que solo necesitas $where
cuando tiene un problema de diseño de esquema. Por ejemplo, agregar otro campo booleano al documento con índice puede ser una buena opción aquí.