2013-11-10 3 views
2

Я хотел бы сделать запрос, который получает список и возвращает все documanets, которые содержатся в списке в запрошенном поле.MongoDB запрос в списке

Например:

Если у меня есть два документа:

Документ 1

{ 
    "list":["a","b","c"] 
} 

Document 2

{ 
    "list":["c","d","e"] 
} 

В случае списка ["a","b","c"] первый документ должен вернуться

В случае списка ["a","b","c","d"] первый документ должен вернуть

В случае списка ["a","c"] никто не должен возвращать

В случае списка ["a","b","c","d","e"] оба должны вернуться

+2

Какой код вы пытались достигнуть? – WiredPrairie

ответ

2

Вы можете сделать это с структура агрегации - намного быстрее и лучше, чем использование Javascript.

var yourList = ["a", "b", etc ] // your list here 
db.collection.aggregate([ 
    {$match:{list:{$in:yourList}}}, 
    {$project:{originalList:"$list",list:1}}, 
    {$unwind:"$list"}, 
    {$match:{list:{$in:yourList}}}, 
    {$group:{_id:"$_id",list:{$push:"$list"}, originalList:{$first:"$originalList"}}}, 
    {$project:{keep:{$eq:["$list","$originalList"]},list:1}}, 
    {$match:{keep:true}} 
]); 

Вы можете добавить еще один $project шаг, чтобы избавиться от поля «держать». Очевидно, что любые другие поля в документах, которые вы хотите выбрать в конце, также должны быть перенесены на стадии проектирования и группировки.

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