Zde máte dvě možnosti. Prvním z nich je použití $where
operátor.
Collection.find( { $where: "this.start === this.end" } )
Druhou možností je použít agregační rámec a $redact
operátor.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where
operátor provádí vyhodnocení JavaScriptu a nemůže využívat indexy, takže dotazujte pomocí $where
může způsobit pokles výkonu vaší aplikace. Viz úvahy
. Pokud použijete $where, každý váš dokument bude převeden z BSON na objekt JavaScript před operací $where, což způsobí pokles výkonu. Váš dotaz lze samozřejmě zlepšit, pokud máte indexový filtr. Pokud vytváříte svůj dotaz dynamicky na základě uživatelského vstupu, existuje také bezpečnostní riziko.
$redact
jako $where
nepoužívá indexy a dokonce neprovádí skenování kolekce, ale výkon dotazů se zlepší, když $redact
protože se jedná o standardní operátory MongoDB. Jak již bylo řečeno, možnost agregace je mnohem lepší, protože svůj dokument můžete vždy filtrovat pomocí operátoru $match.
$where
tady je to v pořádku, ale dalo by se tomu vyhnout. Také věřím, že potřebujete pouze $where
když máte problém s návrhem schématu. Dobrou volbou zde může být například přidání dalšího booleovského pole do dokumentu s indexem.