След като изпълних някои заявки, стигнах до заключението, че $in не работи за масив от масиви .
Можете да използвате $elemMatch
вместо това и ще работи, но е разочароващо, че документацията на MongoDB не предупреждава за това.
Създадох този документ:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Забележете, че полето "items" е масив от низове и тази заявка работи перфектно:
db.nested.findOne({"items":{"$in":["item20"]} })
Сега "level1.0" също е масив от низове, единствената разлика е, че е вътре в друг масив. Тази заявка трябва да работи, но не е:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Единственият начин да получите резултата е да използвате $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Така че $elemMatch
решава проблема, но истинското решение е да се актуализира документацията на MongoDB, за да гласи, че $in
не работи за масиви от масиви. Може би трябва да изпратите заявка до 10gen.