No estoy seguro de que pueda resolver esto elegantemente con su esquema actual; slotTypes
debería ser una matriz de subdocumentos, lo que permitiría que su $elemMatch
consulta para trabajar. En este momento, es un objeto con teclas numéricas.
Es decir, el esquema de su documento debería ser algo como:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Si cambiar el diseño de los datos no es una opción, entonces básicamente tendrá que escanear cada documento para encontrar coincidencias con $where
. Esto es lento, no indexable e incómodo.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Debe leer la documentación en $where para asegurarse de que comprende las advertencias de la misma, y por el amor de todo lo que es sagrado, desinfecte sus entradas a la función; este es un código en vivo que se ejecuta en el contexto de su base de datos.