Javascript 如何在Node.js中基于UserId获得匹配的聚合

Javascript 如何在Node.js中基于UserId获得匹配的聚合,javascript,node.js,mongodb,reactjs,aggregation-framework,Javascript,Node.js,Mongodb,Reactjs,Aggregation Framework,我正在react中开发示例应用程序,因为我使用了聚合,我实现了一个基于与状态匹配的userid的查询,从中获取MAXDate和MINDate。如何基于最大和最小字段获取剩余字段 app.get('/varun', function (req, res) { Light.aggregate( [ { "$match" : { "STATUS":"LIGHTS OFF"} }, { "$

我正在react中开发示例应用程序,因为我使用了聚合,我实现了一个基于与状态匹配的userid的查询,从中获取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",

这里,我将代码与相关输出放在一起。有人能建议我如何解决此问题吗。

尝试在
$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先生,先生。任何可能的状态都可以随时查询。我不知道我是否明白你的意思。是否要添加更多状态以签入匹配条件?如果是,请尝试
{“$match”:{“STATUS”:{$in:[“LIGHTS OFF”,“LIGHTS ON]“}}}}}
好的,我会尝试的,先生非常感谢,先生,如果可能的话,再问一个问题,最大和最小日期中有多少计数