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

mongodb $where заявка за извличане на съдържание на поддокумент

Използване на $where трябва да се избягва в повечето случаи, тъй като и двете ще извикат сканиране на пълна колекция, независимо от това какви други условия биха могли да използват избор на индекс.

Освен това вие извиквате интерпретатора на JavaScript над всеки резултатен документ, което ще бъде значително по-бавно от собствения код. Прочетете предупрежденията на страницата с ръководство, те са там с причина

Когато е възможно, моля, опитайте да използвате .aggregate() вместо това за този тип сравнение. Във вашия случай определено е по-добрият вариант:

db.foo.aggregate([
    { "$match": { "flag": true } },
    { "$unwind": "$versions" },
    { "$project": {
        "versions": "$versions"
        "same": { "$eq": [ "$versions.version", "$defaultVersion" ] }
    }}
    { "$match": { "same": true } },
    { "$project": {
        "_id": 0,
        "versions": 1
    }}
])

Това ви позволява първо да филтрирате заявката си по условието "флаг" и след това да проверите всеки член на масива, за да сравните дали двете полета са еднакви.

Ако е необходимо, след това можете да върнете съвпадащите елементи на масива в масив, където има повече от едно съвпадение. Но не мисля, че това е вашето изискване.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. неуспешно с грешка 10068:невалиден оператор:$oid

  2. Покритата заявка на MongoDB не може да удовлетвори заявка от Index

  3. Как правилно да заявите MongoDB вложен документ с python?

  4. Как да вмъкнете изображения в mongoDB с помощта на java?

  5. подходящо ли е map/reduce за намиране на медианата и режима на набор от стойности за много записи?