Не съм сигурен, че ще можете да разрешите елегантно това с настоящата си схема; slotTypes
трябва да бъде масив от поддокументи, което ще позволи на вашия $elemMatch
заявка за работа. В момента това е обект с цифрови ключове.
Тоест схемата на вашия документ трябва да бъде нещо като:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Ако промяната на оформлението на данните не е опция, тогава ще трябва основно да сканирате всеки документ, за да намерите съвпадения с $where
. Това е бавно, неиндексируемо и неудобно.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Трябва да прочетете документацията за $where за да сте сигурни, че разбирате предупрежденията за това и за любовта към всичко, което е свято, дезинфекцирайте въведените данни във функцията; това е код на живо, който се изпълнява в контекста на вашата база данни.