Nie jestem pewien, czy będziesz w stanie elegancko rozwiązać ten problem przy użyciu obecnego schematu; slotTypes
powinna być tablicą dokumentów podrzędnych, która pozwoliłaby na $elemMatch
zapytanie do pracy. W tej chwili jest to obiekt z klawiszami numerycznymi.
Oznacza to, że Twój schemat dokumentu powinien wyglądać mniej więcej tak:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Jeśli zmiana układu danych nie wchodzi w grę, będziesz musiał przeskanować każdy dokument, aby znaleźć dopasowania z $where
. Jest to powolne, nieindeksowalne i niezręczne.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Powinieneś przeczytać dokumentację na $where aby upewnić się, że rozumiesz jego zastrzeżenia, i z miłości do wszystkiego, co święte, zdezynfekuj swój wkład w tę funkcję; to jest kod na żywo, który jest wykonywany w kontekście Twojej bazy danych.