В ответе на вопрос я нашел интересное решение для поиска значений массива с использованием $ elemMatch.
Если в нашей коллекции есть следующие документы:
{
foo : [ { bar : "xy", baz : 1 },
{ bar : "a", baz : 10 } ]
},
{
foo : [ { bar : "xy", baz : 5 },
{ bar : "b", baz : 50 } ]
}
Следующий запрос будет соответствовать только первому документу:
db.test.find({
foo : { "$all" : [ { "$elemMatch" : { bar : "xy", baz : 1} }, { "$elemMatch" : { bar : "a", baz : 10 } } ] }
});
Я попробовал это с несколькими другими примерами, и это действительно работает. Но официальная документация для оператора $ all ничего не говорит о комбинировании этих двух запросов.
Это предполагаемое поведение или ошибка? Или это просто проблема в том, что документация не охватывает этот вариант использования?