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

MongoDBネストされたオブジェクトの集計カウント

    $unwindを処理する必要があります 配列を操作する場合、これを3回行う必要があります:

     db.collection.aggregate([
    
         // Un-wind the array's to access filtering 
         { "$unwind": "$studies" },
         { "$unwind": "$studies.samples" },
         { "$unwind": "$studies.samples.formdata" },
    
         // Group results to obtain the matched count per key
         { "$group": {
             "_id": "$studies.samples.formdata.GT",
             "count": { "$sum": 1 }
         }}
     ])
    

    理想的には、入力をフィルタリングする必要があります。おそらく、 $match を使用してこれを行います。 $ unwindが処理される前と後の両方で、 $regex> ポイントのデータが「1」で始まるドキュメントと照合します。

     db.collection.aggregate([
    
         // Match first to exclude documents where this is not present in any array member
         { "$match": { "studies.samples.formdata.GT": /^1/ } },
    
         // Un-wind the array's to access filtering 
         { "$unwind": "$studies" },
         { "$unwind": "$studies.samples" },
         { "$unwind": "$studies.samples.formdata" },
    
         // Match to filter
         { "$match": { "studies.samples.formdata.GT": /^1/ } },
    
         // Group results to obtain the matched count per key
         { "$group": {
             "_id": {
                  "_id": "$_id",
                  "key": "$studies.samples.formdata.GT"
             },
             "count": { "$sum": 1 }
         }}
     ])
    

    すべての場合において、「ドル$」の接頭辞付きエントリは、ドキュメントのプロパティを参照する「変数」であることに注意してください。これらは、右側の入力を使用するための「値」です。左側の「キー」は、プレーンな文字列キーとして指定する必要があります。キーに名前を付けるために変数を使用することはできません。




    1. MongoDBでコンソールをクリアする方法

    2. ClusterControl1.6を使用したクラウドデータベースのデプロイ

    3. Spring Mongo DB @DBREF

    4. PyMongoとマルチプロセッシング:ServerSelectionTimeoutError