sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo encuentra valor con clave principal desconocida

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.