Po uruchomieniu kilku zapytań doszedłem do wniosku, że $in nie działa dla tablicy tablic .
Możesz użyć $elemMatch
zamiast tego i będzie działać, ale frustrujące jest to, że dokumentacja MongoDB nie ostrzega o tym.
Utworzyłem ten dokument:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Zauważ, że pole "items" jest tablicą ciągów i to zapytanie działa idealnie:
db.nested.findOne({"items":{"$in":["item20"]} })
Teraz "level1.0" jest również tablicą łańcuchów, jedyną różnicą jest to, że znajduje się wewnątrz innej tablicy. To zapytanie powinno działać, ale nie jest:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Jedynym sposobem na uzyskanie wyniku jest użycie $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Więc $elemMatch
rozwiązuje problem, ale prawdziwym rozwiązaniem jest aktualizacja dokumentacji MongoDB, aby stwierdzała, że $in
nie działa dla tablic tablic. Być może powinieneś przesłać prośbę do 10gen.