sql >> データベース >  >> NoSQL >> MongoDB

任意の深さでMongoDBフィールド名を見つける方法

    あなたは、BSONドキュメントがXMLドキュメントではないという特定のステートメントに正しいです。 XMLは「ノード」で構成されるツリー構造にロードされるため、任意のキーの検索は非常に簡単です。

    MonoDBドキュメントは処理がそれほど簡単ではなく、多くの点で「データベース」であるため、「インデックス作成」と検索の両方を容易にするために、データの場所に一定の「均一性」があることが一般的に期待されます。

    それにもかかわらず、それは行うことができます。ただし、もちろんこれは、サーバー上で実行される再帰的なプロセスを意味し、 $whereを使用したJavaScript処理を意味します。

    基本的なシェルの例として、ただし一般的なfunction $whereへの単なる文字列引数です 他のすべてのオペレーター:

    db.collection.find(
      function () {
        var findKey = "find-this",
            findVal = "please find me";
    
        function inspectObj(doc) {
          return Object.keys(doc).some(function(key) {
            if ( typeof(doc[key]) == "object" ) {
              return inspectObj(doc[key]);
            } else {
              return ( key == findKey && doc[key] == findVal );
            }
          });
        }
        return inspectObj(this);
      }
    )
    

    したがって、基本的に、オブジェクトに存在するキーをテストして、目的の「フィールド名」とコンテンツに一致するかどうかを確認します。これらのキーの1つがたまたま「オブジェクト」である場合は、関数に戻って再度検査します。

    JavaScript .some() 見つかった「最初の」一致が検索関数から返され、trueが返されることを確認します 結果として、その「キー/値」がある程度の深さで存在していたオブジェクトを返します。

    $whereに注意してください 基本的には、コレクションの「インデックス」に適用できる他の有効なクエリフィルタがない限り、コレクション全体をトラバースすることを意味します。

    したがって、注意して使用するか、まったく使用せずに、データをより実用的な形式に再構築してください。

    しかし、これはあなたにあなたのマッチを与えるでしょう。



    1. MongoDbはコード100でシャットダウンします

    2. MongoDBでの大文字と小文字を区別しない並べ替え

    3. Meteor:予期しないmongo終了コード100。再起動。mongoサーバーを起動できません。

    4. DigitalOceanでMongoDBをホストするための最良の方法