我已經使用SQL Server很長一段時間,只是真正學習MongoDB。我想弄清楚如何做聚合發現以獲得我想要的數據。下面是從數據庫中的樣本:Node.js調用MongoDB的聚合查找
{
"_id": "1",
"user_id": "123-88",
"department_id": "1",
"type": "start",
"time": "2017-04-20T19:40:15.329Z"
}
{
"_id": "2",
"user_id": "123-88",
"department_id": "1",
"type": "stop",
"time": "2017-04-20T19:47:15.329Z"
}
我想要做的就是找到部門1的每個唯一USER_ID什麼,只需要使用最新的時間記錄,並告訴我,如果他們是OnCall中與否。所以在上面的例子中,用戶123-88現在沒有通話。你如何做這個查詢?我知道你會需要這樣的東西:
TimeCard.aggregate([
{ $match: {department_id: req.query.department_id}},
{ $sort: { user_id: 1, time: 1 }},
{ $group: { _id: "$user_id", current_type: "$type", lastTime: { $last: "$time" }}}
], function(err, docs){
if(err){console.log(err);}
else {res.json(docs);}
});
但我一直錯誤,所以我知道我在我的邏輯不正確。我知道如果我只是匹配它的作品,並且如果我添加它匹配和排序的排序,但最終的組不起作用。此外,我會添加什麼,然後只顯示oncall的人。再次感謝你的幫助。
它不工作,因爲'current_type'必須是累加器。如果你想在'current_type'中擁有每一個'type',你可以使用[$ push](https://docs.mongodb.com/manual/reference/operator/aggregation/push/#grp._S_push)。 – luisenrike
謝謝luisenrike。我想我不明白。我雖然該組只會讓我回到每個不同user_id的所有user_id,type和lasttime。這是不正確的? –
是的,沒錯。 – luisenrike