Hai due opzioni qui. Il primo consiste nell'usare $where
operatore.
Collection.find( { $where: "this.start === this.end" } )
La seconda opzione consiste nell'utilizzare il framework di aggregazione e $redact
operatore.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
Il $where
l'operatore esegue una valutazione JavaScript e non può sfruttare gli indici, quindi interroga utilizzando $where
può causare un calo delle prestazioni nell'applicazione. Vedi considerazioni
. Se utilizzi $where, ogni documento verrà convertito da BSON in oggetto JavaScript prima dell'operazione $where che causerà un calo delle prestazioni. Ovviamente la tua query può essere migliorata se hai un filtro di indice. Inoltre, esiste un rischio per la sicurezza se stai creando la tua query in modo dinamico sulla base dell'input dell'utente.
Il $redact
come $where
non utilizza indici e non esegue nemmeno una scansione della raccolta, ma le prestazioni della tua query migliorano quando $redact
perché è un operatore MongoDB standard. Detto questo, l'opzione di aggregazione è molto migliore perché puoi sempre filtrare il tuo documento usando l'operatore $match.
$where
qui va bene ma potrebbe essere evitato. Inoltre credo che tu abbia solo bisogno di $where
quando hai un problema di progettazione dello schema. Ad esempio, l'aggiunta di un altro campo booleano al documento con indice può essere una buona opzione qui.