Jeg er ikke sikker på, at du vil være i stand til at løse dette elegant med dit nuværende skema; slotTypes
bør være en række underdokumenter, som ville tillade din $elemMatch
forespørgsel om at arbejde. Lige nu er det et objekt med numeriske taster.
Det vil sige, dit dokumentskema skal være noget i stil med:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Hvis ændring af datalayoutet ikke er en mulighed, bliver du dybest set nødt til at scanne gennem hvert dokument for at finde match med $where
. Dette er langsomt, uindekserbart og akavet.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Du bør læse dokumentationen om $where for at sikre, at du forstår forbeholdene ved det, og af kærlighed til alt, hvad der er helligt, skal du rense dine input til funktionen; dette er live kode, der udføres i konteksten af din database.