2017-01-18 7 views
1

У меня есть 'имя' коллекции с 2 документами структуры:

DOC 1:

{ 
    a: 1 
    b : [{name:"AAA",age:10}, 
     {name:"BBB",age:12}, 
     {name:"CCC",age:13}] 
    } 

документ 2:

{ 
    a: 2 
    b : [{name:"DDD",age:14}, 
     {name:"EEE",age:15}, 
     {name:"FFF",age:16}] 
    } 

Так как я новый to MongoDB, я пытаюсь найти разницу в использовании оператора $ elemMatch и не использовать его. В основном я пытаюсь запрос и найти первый документ (документ 1) с именем AAA и возрастом 10. Таким образом, с помощью $ elemMatch, мой запрос выглядит следующим образом:

db.name.find({b: {$elemMatch :{name:"AAA",age:10}}}) 

Этот запрос отлично работает, но на мой вопрос в том, что то, что необходимо использовать этот запрос, когда я могу запросить так:

db.name.find({b:{name:"AAA",age:10}}) 

Я уверен, что должна быть какая-то причина $ elemMatch, просто пытается найти разницу. Спасибо заранее за ответ !!!

ответ

2

Главное отличие состоит в том, что второй запрос (без $elemMatch) будет соответствовать только элементам в массиве b, который содержит только эти два поля и только в этом порядке.

Таким образом, первый запрос будет соответствовать следующим два документа, но второй запрос не будет:

{ 
a: 1 
b: [{name: "AAA", age: 10, city: 'New York'}, 
    {name: "BBB", age: 12, city: 'Paris'}, 
    {name: "CCC", age: 13, city: 'London'}] 
} 

{ 
a: 1, 
b: [{age: 10, name: "AAA"}, 
    {name: "BBB", age: 12}, 
    {name: "CCC", age: 13}] 
} 
+1

Второй запросом является совпадением по всему вложенному документу 'db.name.find ({Ь { имя: «AAA», возраст: 10}}) ', но не' db.name.find ({"b.name": "AAA", "b.age": 10}) '. Таким образом, второй запрос теоретически является $ elemMatch в случае использования OP. – Veeram