Тук имате две възможности. Първият е да използвате $where
оператор.
Collection.find( { $where: "this.start === this.end" } )
Втората опция е да използвате рамката за агрегиране и $redact
оператор.
Collection.aggregate([
{ "$redact": {
"$cond": [
{ "$eq": [ "$start", "$end" ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
$where
оператор прави оценка на JavaScript и не може да се възползва от индексите, така че заявка използвайки $where
може да причини спад в производителността на вашето приложение. Вижте съображения
. Ако използвате $where, всеки ваш документ ще бъде преобразуван от BSON в JavaScript обект преди операцията $where, което ще доведе до спад в производителността. Разбира се, вашата заявка може да бъде подобрена, ако имате индексен филтър. Освен това съществува риск за сигурността, ако изграждате заявката си динамично въз основа на въведените от потребителя данни.
$redact
като $where
не използва индекси и дори извършва сканиране на колекция, но производителността на вашата заявка се подобрява, когато $redact
тъй като е стандартен MongoDB оператор. Като се има предвид това, опцията за агрегиране е много по-добра, защото винаги можете да филтрирате документа си с помощта на оператора $match.
$where
тук е добре, но може да се избегне. Също така вярвам, че ви трябва само $where
когато имате проблем с дизайна на схемата. Например добавянето на друго булево поле към документа с индекс може да бъде добра опция тук.