MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trova i record con campo in un documento nidificato quando i campi padre non sono noti

Per cercare una chiave nel documento nidificato è necessario scorrere i campi dei documenti in modo ricorsivo, è possibile farlo in JavaScript con l'aiuto di $dove metodo in MongoDBLa query seguente cercherà se esiste un nome chiave in un documento e nei suoi documenti secondari.

L'ho verificato con l'esempio che hai fornito e funziona perfettamente.

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);
  }}

);