Несколько выражений $elemMatch для сопоставления значений массива с помощью $all в MongoDB?

В ответ на 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 ничего не говорит о объединении этих двух запросов.

Является ли это предполагаемым поведением или ошибкой? Или это просто проблема, что документация не распространяется на этот прецедент?

Ответ 1

Это предполагаемое поведение. Документация не охватывает этот прецедент, и мы работаем над этим, чтобы сделать его лучше. Однако его сложно документировать все возможные комбинации запросов.