Ik weet niet zeker of je dit elegant kunt oplossen met je huidige schema; slotTypes
zou een array van subdocumenten moeten zijn, waardoor uw $elemMatch
vraag om te werken. Op dit moment is het een object met numerieke toetsen.
Dat wil zeggen, uw documentschema zou er ongeveer zo uit moeten zien:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Als het wijzigen van de gegevenslay-out geen optie is, moet u in principe door elk document scannen om overeenkomsten te vinden met $where
. Dit is traag, niet-indexeerbaar en onhandig.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Lees de documentatie over $where om ervoor te zorgen dat u de waarschuwingen ervan begrijpt, en voor de liefde van alles wat heilig is, uw ingangen voor de functie zuiveren; dit is live code die wordt uitgevoerd in de context van uw database.