MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да върнете документи, в които две полета имат еднаква стойност

Тук имате две възможности. Първият е да използвате $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 когато имате проблем с дизайна на схемата. Например добавянето на друго булево поле към документа с индекс може да бъде добра опция тук.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node js / MongoDB реплика набор масив в javascript

  2. MongoDb агрегиране

  3. Заявка MongoDB за множество ObjectIDs в Array

  4. Как да експортирате резултатите от заявката на MongoDB в JSON файл

  5. MongoDB заявка към попълнени полета