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

再帰クエリ?

    いくつかの例で回答したアクセスパターンのタイプに最適なスキーマについての質問は、MongoDB/ドキュメントデータベースで階層を表す方法について説明しています。

    多くの異なるクエリで機能する一般的な答えは、各ファイルにその名前、サイズ、直接の親、およびすべての祖先の配列を格納する場所です。

    これでサンプルデータが作成されます:

    db.files.save({ _id: "root"})
    db.files.save({ _id: "src", parent: "root", ancestors: ["root"] } )
    db.files.save({ _id: "lib", parent: "root", ancestors: ["root"]} )
    db.files.save({ _id: "config.cfg", parent: "root", ancestors: ["root"], size: 2310 })
    db.files.save({ _id: "file1.js", parent: "src", ancestors: ["root","src"], size: 5039 })
    db.files.save({ _id: "file2.js", parent: "src", ancestors: ["root","src"], size: 1299 })
    

    ここで、「このディレクトリ内のファイル」や「このディレクトリ内のすべてのファイル(再帰的を含む)」などをクエリする場合は、次のようにクエリを実行します。

    db.files.find( { parent: "root" } )    // all files in /src directory
    db.files.find( {ancestors: "root"} )   // all files under /root directory tree
    

    合計などを取得するには集計フレームワークを使用する必要があるため、フォルダーのサイズのクエリは次のようになります。

    db.files.aggregate([
           {$match:{ancestors:"src"}}, 
           {$group:{
               _id:   "src",
               total_size:  {$sum:"$size"}
              }
           }
    ]);
    

    ルートフォルダにあるすべてのフォルダのサイズを確認するには、次のようになります。

    db.files.aggregate([
           {$match:{ancestors:"root"}}, 
           {$group:{
               _id:   "root",
               total_size:  {$sum:"$size"}
              }
           }
    ]);
    



    1. Mongooseでデータベースを削除する方法は?

    2. 埋め込まれたMongoDBドキュメントがC#ドライバーで保存時にIDを取得しない

    3. リストのリストにあるアイテムを数える方法

    4. MongoDBは、キーが配列の文字列と等しい場所を検索します