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

$projection срещу $elemMatch

Разликата в използването на проекция е донякъде фина. Във вашето примерно използване това трябва да са еквивалентни заявки (по отношение на използването на индекса), но $elemMatch примерът ненужно повтаря критериите на заявката. $ проекцията би била по-разумен избор за този пример.

Съществена разлика, отбелязана в документацията, е масив ограничение на полето за $ прогнози:

Някои допълнителни бележки относно разликите в операторите за проекция по-долу ...

Позиционният ($ ) оператор на проекция :

  • ограничава съдържанието на поле от масив, което е включено в резултатите от заявката, за да съдържа първия елемент, който съответства на документа на заявката.

  • изисква полето за съответстващ масив да бъде включено в критериите на заявката

  • може да се използва само ако в критериите на заявката

    се появи едно поле за масив
  • може да се използва само веднъж в проекция

$elemMatch оператор на проекция

  • ограничава съдържанието на поле от масив, което е включено в резултатите от заявката, за да съдържа само първия елемент от масива, който отговаря на условието $elemMatch .

  • не изисква съответстващият масив да бъде в критериите на заявката

  • може да се използва за съвпадение на множество условия за елементи от масив, които са вградени документи

$elemMatch оператор на заявка

Имайте предвид, че има и $elemMatch оператор на заявка, който извършва подобно съвпадение, но в заявката, а не в проекцията на резултатите. Не е необичайно това да се използва в комбинация с $ проекция.

Заемане на пример от документите където можете да използвате и двете:

db.students.find(
    // use $elemMatch query operator to match multiple criteria in the grades array
    { grades: {
        $elemMatch: {
            mean:  { $gt: 70 },
            grade: { $gt: 90 }
        }
    }},

    // use $ projection to get the first matching item in the "grades" array
    { "grades.$": 1 }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb агрегиране php

  2. какъв е механизмът за извършване на пресичане в заявка на Mongo Linq

  3. Данните са нулеви след запазване на обект с Moongose ​​и GraphQL

  4. Получаване на грешка при вмъкване в колекция Meteor

  5. MongoDB Изключение:Сървърът отчита кабелна версия 0, но версията на libmongoc изисква поне 3