2015-05-01 5 views
0

У меня есть MongoDB документы со следующей структурой:запроса внутренний массив в MongoDB

 { 
      name:'some name here', 
      someStuff: [ 
       { 
        type: 'banana', 
        colors:['yellow','red] 
       }, 
       { 
        type: 'apple', 
        colors:['red','blue','orange'] 
       } 
      ] 
     } 

Я хотел бы запросить все документы, которые содержат по крайней мере один цвет из массива, такие как [ «красного», «зеленый»]

Я попробовал следующий запрос, но он не работает:

‌‌db.SomeDB.find({ 
    "someStuff": { 
     $elemMatch: { 
      "colors": { 
       $elemMatch: { 
        "$in": ['red', 'green'] 
       } 
      } 
     } 
    } 

вы можете дать мне несколько советов, как написать этот запрос?

ответ

0

Используйте dot notation для запроса внедренных документов:

db.SomeDB.find({"someStuff.colors": {"$in": ["red", "green"]}}) 
0

Вы отсутствуете мелкие вещи не использовать $elemMatch после colors проверки ниже запроса:

db.collectionName.find({ 
    "someStuff": { 
    "$elemMatch": { 
     "colors": { 
     "$in": ["red", "green"] 
     } 
    } 
    } 
}).pretty() 
+0

спасибо, ваше решение работает, но Ответ chridam более "изящный" – Igor

Смежные вопросы