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

mongoDBでマルチマッチングフィルターカウントを取得する方法

    集約フレームワーク を介して一度に実行することは非常に可能です

    MongoDb 3.6以降では、 <の使用を活用できます。 code> $ arrayToObject $ replaceRoot内の演算子 目的の結果を得るためのパイプライン。

    パイプライン内で、<を利用します。 code> $ cond $group<の演算子/ code> 次のように、paramフィールドのブール値に基づいてカウントを評価するステージ:

    db.getCollection('patients').aggregate([ 
        { "$project": { "_id": 0 } },
        { "$project": { "data": { "$objectToArray": "$$ROOT" } } },
        { "$unwind": "$data" },
        { "$group": { 
            "_id": "$data.k", 
            "count": { 
                "$sum": {
                    "$cond": [ "$data.v", 1, 0 ] 
                }
            } 
        } },
        { "$group": { 
            "_id": null, 
            "counts": { 
                "$push": { "k": "$_id", "v": "$count" } 
            } 
        } }, 
        { "$project": { 
            "data": { "$arrayToObject": "$counts" } 
        } }, 
        { "$replaceRoot": { "newRoot": "$data" } } 
    ])
    

    上記の $ arrayToObject および $ replaceRoot 演算子の場合、合計を計算するときにグループパイプラインのフィールドを明示的に指定する必要があります。

    db.getCollection('patients').aggregate([    
        { "$group": { 
            "_id": null,             
            "param1_count": {
                "$sum": {
                    "$cond": [ "$param1", 1, 0 ] /* similar to "$cond": [ { "$eq": [ "$param1", true ] }, 1, 0 ] */
                }
            },
            "param2_count": {
                "$sum": {
                    "$cond": [ "$param2", 1, 0 ]
                }
            },
            "param3_count": {
                "$sum": {
                    "$cond": [ "$param3", 1, 0 ]
                }
            },
            "param4_count": {
                "$sum": {
                    "$cond": [ "$param4", 1, 0 ]
                }
            } 
        } },
        { "$project": {
            "_id": 0,             
            "param_counts": {
                "param1": "$param1_count",
                "param2": "$param2_count",
                "param3": "$param3_count",
                "param4": "$param4_count"
            }
        } }
    ])
    



    1. mongodbでサブアレイ値を抽出します

    2. 親ドキュメントで動的フィールドをフラット化する方法-SpringdataMongo DB

    3. php_iniがphp.iniの場所に設定されていません

    4. このMongoDB/Node非同期の問題を回避するにはどうすればよいですか?