Non sono sicuro che sarai in grado di risolverlo elegantemente con il tuo schema attuale; slotTypes
dovrebbe essere una matrice di documenti secondari, che consentirebbero il tuo $elemMatch
interrogare per funzionare. In questo momento, è un oggetto con tasti numerici.
Cioè, lo schema del tuo documento dovrebbe essere qualcosa del tipo:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Se la modifica del layout dei dati non è un'opzione, dovrai praticamente scansionare tutti i documenti per trovare corrispondenze con $where
. Questo è lento, non indicizzabile e imbarazzante.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Dovresti leggere la documentazione su $where per assicurarti di comprenderne le avvertenze e, per l'amore di tutto ciò che è santo, sanifica i tuoi input per la funzione; questo è codice attivo in esecuzione nel contesto del tuo database.