Javascript 如何在Node.js中基于UserId获得匹配的聚合
我正在react中开发示例应用程序,因为我使用了聚合,我实现了一个基于与状态匹配的userid的查询,从中获取MAXDate和MINDate。如何基于最大和最小字段获取剩余字段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"} }, { "$
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]“}}}}}
好的,我会尝试的,先生非常感谢,先生,如果可能的话,再问一个问题,最大和最小日期中有多少计数