Po provedení několika dotazů jsem došel k závěru, že $in nefunguje pro pole polí .
Můžete použít $elemMatch
místo toho a bude to fungovat, ale je frustrující, že dokumentace MongoDB na to nevaruje.
Vytvořil jsem tento dokument:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Všimněte si, že pole "items" je pole řetězců a tento dotaz funguje perfektně:
db.nested.findOne({"items":{"$in":["item20"]} })
Nyní je "level1.0" také polem řetězců, jediný rozdíl je v tom, že je uvnitř jiného pole. Tento dotaz by měl fungovat, ale není:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Jediný způsob, jak získat výsledek, je použít $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Takže $elemMatch
řeší problém, ale skutečným řešením je aktualizovat dokumentaci MongoDB tak, aby bylo uvedeno, že $in
nefunguje pro pole polí. Možná byste měli odeslat žádost 10gen.