Nejsem si jistý, že to dokážete elegantně vyřešit se svým současným schématem; slotTypes
by mělo být pole dílčích dokumentů, které by umožnily váš $elemMatch
dotaz do práce. Právě teď je to objekt s numerickými klávesami.
To znamená, že schéma vašeho dokumentu by mělo být něco jako:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Pokud změna rozvržení dat není možná, pak budete muset v podstatě prohledat každý dokument, abyste našli shodu s $where
. Je to pomalé, neindexovatelné a nešikovné.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Měli byste si přečíst dokumentaci o $where abyste se ujistili, že rozumíte jeho upozorněním, a z lásky ke všemu, co je svaté, dezinfikujte své vstupy do funkce; toto je živý kód, který se spouští v kontextu vaší databáze.