Depois de executar algumas consultas, cheguei à conclusão de que $in não funciona para uma matriz de matrizes .
Você pode usar
$elemMatch
em vez disso e funcionará, mas é frustrante que a documentação do MongoDB não avise sobre isso. Criei este documento:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Observe que o campo "items" é um array de strings e esta consulta funciona perfeitamente:
db.nested.findOne({"items":{"$in":["item20"]} })
Agora, "level1.0" também é um array de strings, a única diferença é que está dentro de outro array. Esta consulta deve funcionar, mas não é:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
A única maneira de obter o resultado é usando $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Então
$elemMatch
resolve o problema, mas a solução real é atualizar a documentação do MongoDB para afirmar que $in
não funciona para matrizes de matrizes. Talvez você deva enviar uma solicitação para 10gen.