В ответ на question я нашел интересное решение для поиска значений массива с помощью $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 ничего не говорит о объединении этих двух запросов.
Является ли это предполагаемым поведением или ошибкой? Или это просто проблема, что документация не распространяется на этот прецедент?