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

mongodbでの単一クエリによる複数カウント

    以下で試すことができます$facet 集約

    $count 集計では、常に単一の一致のみのカウントが得られます( $match ) 調子。したがって、各カウントをさらに複数のセクションに分割する必要があり、それが $facet 同じ入力ドキュメントのセットで、単一のステージ内の複数の集約パイプラインをプロセスによって提供します。

    db.collection.aggregate([
      { "$facet": {
        "Total": [
          { "$match" : { "ReleaseDate": { "$exists": true }}},
          { "$count": "Total" },
        ],
        "Released": [
          { "$match" : {"ReleaseDate": { "$exists": true, "$nin": [""] }}},
          { "$count": "Released" }
        ],
        "Unreleased": [
          { "$match" : {"ReleaseDate": { "$exists": true, "$in": [""] }}},
          { "$count": "Unreleased" }
        ]
      }},
      { "$project": {
        "Total": { "$arrayElemAt": ["$Total.Total", 0] },
        "Released": { "$arrayElemAt": ["$Released.Released", 0] },
        "Unreleased": { "$arrayElemAt": ["$Unreleased.Unreleased", 0] }
      }}
    ])
    

    出力

    [{
        "Total": 3,
        "Released": 2,
        "Unreleased": 1
    }]
    


    1. MongoDBでサブドキュメントを選択する方法

    2. MongoDB-オブジェクト?なぜ集約して_idが必要なのですか

    3. MongoDB $ cond

    4. mongoシェルでドキュメントフィールドを表示するにはどうすればよいですか?