2015-10-02 2 views
0

Привет, У меня есть структура документа, которая выглядит так.NodeJS Mongoose массив запросов, который является подмножеством другого массива

Users = [ 
    { 
    _id: 32339457349878493, 
    books: [ 
     "Harry Potter", 
     "Lord of the Rings", 
     "Life of Pi" 
    ] 
    }, 
    { 
    _id: 32339457349878493, 
    books: [ 
     "Life of Pi", 
     "The Alchemist", 
     "Mocking Jay" 
    ] 
    }, 

    { 
    _id: 32339457349878493, 
    books: [ 
     "Harry Potter", 
     "Life of Pi", 
     "The Alchemist", 

    ] 
    }, 

    ] 

Я хочу, чтобы сделать запрос [ «Гарри Поттер», «Жизнь Пи»], которая будет возвращать мне документы, которые содержат оба этих книг.

В этом случае первая и третья записи будут возвращены!

Заранее благодарен!

ответ

2

Вы в основном хотите $all, который является обобщающей версией $and:

Users.find({ "books": { "$all": ["Harry Potter", "Life of Pi"] } },function(err,users) } { 

}); 

Это в основном означает, что «книга» массив должен содержать как аргументы, указанных для того, чтобы быть совпадением.

Чем больше формы с $and требует поля с именем дважды:

{ 
    "$and": [ 
     { "books": "Harry Potter" }, 
     { "books": "Life of Pi" } 
    ] 
} 

Так что гораздо лучше использовать $all.

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