MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Rechercher des enregistrements avec un champ dans un document imbriqué lorsque les champs parents ne sont pas connus

Pour rechercher une clé dans un document imbriqué, vous devez parcourir les champs des documents de manière récursive, vous pouvez le faire en JavaScript à l'aide de $where méthode dans MongoDBLa requête ci-dessous recherchera si un nom de clé existe dans un document et ses sous-documents.

J'ai vérifié cela avec l'exemple que vous avez donné, et cela fonctionne parfaitement 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);
  }}

);