Não tenho certeza se você conseguirá resolver isso de forma elegante com seu esquema atual;
slotTypes
deve ser um array de subdocumentos, o que permitiria que seu $elemMatch
consulta para trabalhar. No momento, é um objeto com teclas numéricas. Ou seja, o esquema do seu documento deve ser algo como:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Se alterar o layout de dados não for uma opção, você precisará basicamente varrer todos os documentos para encontrar correspondências com
$where
. Isso é lento, não indexável e desajeitado. db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Você deve ler a documentação em $where para certificar-se de que você entende as advertências dele, e pelo amor de tudo o que é sagrado, higienize suas entradas para a função; este é o código ao vivo que está sendo executado no contexto do seu banco de dados.