【问题标题】:How to get matched aggregations based on UserId in Node.js如何根据 Node.js 中的 UserId 获取匹配的聚合
【发布时间】:2018-07-23 21:08:57
【问题描述】:

我正在开发示例应用程序,因为我使用了聚合,我实现了一个基于用户 ID 的查询,该查询与从它获取 MAXDate 和 MINDate 的状态匹配。如何根据最大和最小字段获取剩余字段。

    app.get('/varun', function (req, res) {
  Light.aggregate( [ 
      { 
      "$match" : {
             "STATUS":"LIGHTS OFF"} 
      },
        {
         "$group" : {
                "_id" : "$SWITCHID",
                    LIGHTOFFMINDATE: { "$min" : "$RECEIVEDDATE"
                                      },
                    LIGHTOFFMAXDATE:{"$max":"$RECEIVEDDATE"
                                    },
                    information:{"$push":
                    {
                      _id:"$SWITCHID",
                      TOTALSTREETLIGHTS:"$TOTALSTREETLIGHTS",
                      WORKINGSTREETLIGHTS:"$WORKINGSTREETLIGHTS",
                      CUMULATIVEKWH:"$CUMULATIVEKWH",
                      STATUS:"$STATUS",
                      LATITUDE:"$LATITUDE",
                      LONGITUDE:"$LONGITUDE",
                      OFFICE_ID:"$OFFICE_ID",
                      FLAG2:"$FLAG2",
                      CREATE_DATE:"$CREATE_DATE"

                    }
                  },
},

}]
, function (err, light) {

  console.log("naresh:" +JSON.stringify(light));


        res.json(light);
    });
});

output:-
"_id": "Z6-W66-9C/3",
        "LIGHTOFFMINDATE": "2018-02-09T00:00:00.000Z",
        "LIGHTOFFMAXDATE": "2019-02-09T00:00:00.000Z",

在这里,我正在放置带有相关输出的代码。任何人都可以建议我如何解决这个问题。

【问题讨论】:

    标签: javascript node.js mongodb reactjs aggregation-framework


    【解决方案1】:

    尝试在$group 之前添加$sort,并使用$first$last$$ROOT 来访问整个文档。

    Light.aggregate([
      {"$match":{"STATUS":"LIGHTS OFF"}},
      {"$sort":{"RECEIVEDDATE":1}},
      {"$group":{
        "_id":"$SWITCHID",
        "LIGHTOFFMINDATE":{"$first":"$$ROOT"},
        "LIGHTOFFMAXDATE":{"$last":"$$ROOT"}
      }}
    ],function (err, light) {
       console.log("naresh:" +JSON.stringify(light));
       res.json(light);
    });
    

    获取最小和最大日期的计数

    Light.aggregate([
      {"$match":{"STATUS":"LIGHTS OFF"}},
      {"$sort":{"RECEIVEDDATE":1}},
      {"$group":{
        "_id":"$SWITCHID",
        "LIGHTOFFMINDATEDOC":{"$first":"$$ROOT"},
        "LIGHTOFFMAXDATEDOC":{"$last":"$$ROOT"},
        "ALLDOCS":{"$push":"$$ROOT"}
      }},
      {"$project": {
        "LIGHTOFFMINDATEDOC": 1,
        "minSalary": 1,
        "LIGHTOFFMAXDATEDOC": 1,
        "LIGHTOFFMINDATECOUNT": {
          "$size": {
            "$filter": {
              "input": "$ALLDOCS",
              "as": "doc",
              "cond": {
                "$eq": [
                  "$$doc.RECEIVEDDATE",
                  "$LIGHTOFFMINDATEDOC.RECEIVEDDATE"
                ]
              }
            }
          }
        },
        "LIGHTOFFMAXDATECOUNT": {
          "$size": {
            "$filter": {
              "input": "$ALLDOCS",
              "as": "doc",
              "cond": {
                "$eq": [
                  "$$doc.RECEIVEDDATE",
                  "$LIGHTOFFMAXDATEDOC.RECEIVEDDATE"
                ]
              }
            }
          }
        }
      }}
    ],function (err, light) {
        console.log("naresh:" +JSON.stringify(light));
        res.json(light);
    });
    

    【讨论】:

    • 非常感谢,我会试试这个代码服务器,但不响应
    • 哦,我明白了。我错过了回调。更新了答案。
    • 我明白了,非常感谢 Veeram 先生,先生任何可能的状态关闭和一个查询
    • Np。不确定我是否关注你。您想添加更多状态以检查匹配条件吗?如果是,请尝试{"$match":{"STATUS":{$in:["LIGHTS OFF", "LIGHTS ON]"}}}
    • 好的,先生,我会试试的,非常感谢先生,先生,如果可能的话,再问一个问题,最大和最小日期的计数是多少
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2021-08-08
    • 1970-01-01
    • 2022-01-16
    • 2014-08-27
    • 2021-06-18
    • 2011-01-16
    • 2019-02-05
    相关资源
    最近更新 更多