MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Localizar registros com campo em um documento aninhado quando os campos pai não são conhecidos


Para pesquisar uma chave em um documento aninhado, você precisa iterar os campos de documentos recursivamente, você pode fazer isso em JavaScript com a ajuda de $where método no MongoDB A consulta abaixo pesquisará se existe um nome de chave em um documento e seus subdocumentos.

Eu verifiquei isso com o exemplo que você deu, e está funcionando perfeitamente bem.
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);
  }}

);