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

条件とグループ化に一致するサブドキュメントの数で集計

    別の代替リストがあり、使用したものとは期待する結果が異なる理由の説明がすでにあるので、答えを正しく読んでおく必要があります。

    代わりに、複数の「PASS」または「FAIL」の可能性を尊重するこれが必要です。

      Model.aggregate(
        [
          { "$sort": { "executionProject": 1, "runEndTime": 1 } },
          { "$group": {
            "_id": "$executionProject",
            "suiteList": { "$last": "$suiteList" },
            "runEndTime": { "$last": "$runEndTime" }
          }},
          { "$unwind": "$suiteList" },
          { "$group": {
            "_id": "$_id",
            "suite-pass": { 
              "$sum": {
                "$cond": [
                  { "$eq": [ "$suiteList.suiteStatus", "PASS" ] },
                  1,
                  0
                ]
              }
            },
            "suite-fail": { 
              "$sum": {
                "$cond": [
                  { "$eq": [ "$suiteList.suiteStatus", "FAIL" ] },
                  1,
                  0
                ]
              }
            },
            "runEndTime": {"$first": "$runEndTime"}
          }},
          { "$sort": { "runEndTime": 1 }}
        ],
        function(err,result) {
    
        }
      );
    

    これは一種のアプローチの「組み合わせ」です。 1つ目は、期待どおりにrunTimeで「最後」を取得することです。次は、配列を分解することです。今回は、1を記録するだけでなく、成功または失敗の可能性のある発生を実際に「合計」します。 アレイの合格または不合格のいずれかについて、実際の「合格」または「不合格」がカウントされます。

    結果:

    {
            "_id" : "Project1",
            "suite-pass" : 0,
            "suite-fail" : 1,
            "runEndTime" : ISODate("2015-08-19T09:46:31.108Z")
    }
    {
            "_id" : "Project2",
            "suite-pass" : 2,
            "suite-fail" : 0,
            "runEndTime" : ISODate("2015-08-19T11:09:52.537Z")
    }
    {
            "_id" : "Project3",
            "suite-pass" : 0,
            "suite-fail" : 1,
            "runEndTime" : ISODate("2015-08-19T11:18:41.460Z")
    }
    


    1. MongoDBセキュリティの3つのA–認証、承認、監査

    2. WAMPMongoDB-PHP拡張機能

    3. MongoDBで、埋め込みオブジェクトのプロパティに基づいてドキュメントを並べ替えるにはどうすればよいですか?

    4. 単体テストにモックMongoDBサーバーを使用する