MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Finden Sie Datensätze mit Feld in einem verschachtelten Dokument, wenn übergeordnete Felder nicht bekannt sind

Um einen Schlüssel in einem verschachtelten Dokument zu suchen, müssen Sie die Dokumentenfelder rekursiv durchlaufen, Sie können dies in JavaScript mit Hilfe von $where tun Methode in MongoDBDie folgende Abfrage sucht, ob ein Schlüsselname in einem Dokument und seinen Unterdokumenten existiert.

Ich habe dies anhand des von Ihnen angegebenen Beispiels überprüft und es funktioniert einwandfrei.

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

);