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

Encuentre registros con campo en un documento anidado cuando no se conocen los campos principales

Para buscar una clave en un documento anidado, debe iterar los campos de los documentos de forma recursiva, puede hacerlo en JavaScript con la ayuda de $where método en MongoDB La siguiente consulta buscará si existe un nombre de clave en un documento y sus subdocumentos.

He comprobado esto con el ejemplo que has dado y funciona perfectamente bien.

db.getCollection('test').find({ $where: function () {
    var search_key = "lev3_field2";

    function check_key(document) {
      return Object.keys(document).some(function(key) {
        if ( typeof(document[key]) == "object" ) {
            if ( key == search_key ) {
                return true;
            } else {
                return check_key(document[key]);
            }
        } else {
          return ( key == search_key );
        }
      });
    }
    return check_key(this);
  }}

);