Dopo aver eseguito alcune query, sono giunto alla conclusione che $in non funziona per un array di array .
Puoi usare $elemMatch
invece e funzionerà, ma è frustrante che la documentazione di MongoDB non lo avverta.
Ho creato questo documento:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Si noti che il campo "items" è un array di stringhe e questa query funziona perfettamente:
db.nested.findOne({"items":{"$in":["item20"]} })
Ora, "level1.0" è anche un array di stringhe, l'unica differenza è che si trova all'interno di un altro array. Questa query dovrebbe funzionare ma non lo è:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
L'unico modo per ottenere il risultato è usare $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Quindi $elemMatch
risolve il problema, ma la vera soluzione è aggiornare la documentazione di MongoDB per affermare che $in
non funziona per array di array. Forse dovresti inviare una richiesta a 10gen.