Ich bin mir nicht sicher, ob Sie dies mit Ihrem aktuellen Schema elegant lösen können. slotTypes
sollte ein Array von Unterdokumenten sein, was Ihr $elemMatch
zulassen würde Abfrage zu arbeiten. Im Moment ist es ein Objekt mit numerischen Tasten.
Das heißt, Ihr Dokumentschema sollte in etwa so aussehen:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Wenn das Ändern des Datenlayouts keine Option ist, müssen Sie im Grunde jedes Dokument durchsuchen, um Übereinstimmungen mit $where
zu finden . Dies ist langsam, nicht indexierbar und umständlich.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Sie sollten die Dokumentation zu $where lesen um sicherzustellen, dass Sie die Vorbehalte verstehen, und aus Liebe zu allem, was heilig ist, säubern Sie Ihre Eingaben für die Funktion; Dies ist Live-Code, der im Kontext Ihrer Datenbank ausgeführt wird.