我有一個填充了資料的 MongoDB 資料庫,我試圖在某個時間范圍內查詢并獲取結果,在這種情況下是幾周。我正在這樣查詢,這可能不正確(?),以獲取在過去 6 周內創建的所有物件:
let weeklyPie = await Job.aggregate([
{ $match: { createdBy: mongoose.Types.ObjectId(req.user.userId) } },
{
$match: {
dateCreated: {
$gte: moment().week(-6).toDate(),
$lt: moment().startOf('week').toDate(),
},
},
},
]);
據說這將歸還我在過去六周內創建的所有作業。
此外,我想按周對它們進行分組,因此在第 14 周(當前周)創建的所有作業都回傳到一個名為 weekOne 的組中,在第 13 周創建的作業在一個名為 weekTwo 的組中回傳,依此類推,從前六周開始當前的。
這就是我的架構在資料庫中的樣子:
{
"_id": "6242dc818cd686716633be36",
"company": "Ledner Inc",
"position": "VP Product Management",
"status": "interview",
"jobType": "part-time",
"jobLocation": "San José de Feliciano",
"dateCreated": "2022-03-27T21:24:36.000Z",
"createdBy": "62399147d817b82f5fe8f927",
"createdAt": "2022-02-16T04:06:46.000Z",
"updatedAt": "2022-04-07T10:51:05.171Z",
"__v": 0,
"interviewTime": "2022-04-20T16:30:00.000Z"
}
所以問題是:
- 獲得過去六周內我所有物品的最佳方式是什么?上面的片段是否正確?我不是太自信
- 如何按周對它們進行分組并獲得整個物件?假設在第 14 周創建了 4 個作業,我想僅在該周獲得所有 4 個物件,并且與第 13 周相同,依此類推。
有什么提示嗎?
uj5u.com熱心網友回復:
看來您可以使用$weekand $group。有一個沒有組名的簡單解決方案:
db.collection.aggregate([
{
$match: {
createdBy: mongoose.Types.ObjectId(req.user.userId),
dateCreated: {
$gte: moment().startOf('week').week(-6).toDate(),
$lt: moment().startOf('week').toDate()
},
}
},
{
"$addFields": {
"week": {$week: "$dateCreated"}
}
},
{
$project: {data: "$$ROOT"}
},
{
$group: {
_id: "$data.week",
week: {$first:"$data.week"},
data: {$push: "$data"}
}
}
])
為了得到與您預期結果相似的東西。您可以在操場上看到它是如何作業的。
如果將組命名為“weekOne”、“weekTwo”很重要,您可以通過添加一個步驟,從給定的組名稱串列中找到周組名稱來實作:
db.collection.aggregate([
{
$match: {
createdBy: mongoose.Types.ObjectId(req.user.userId),
dateCreated: {
$gte: moment().startOf('week').startOf('week').toDate(),
$lt: moment().startOf('week').toDate()
},
}
},
{
"$addFields": {
"weekNum": {$week: "$dateCreated"},
"currentWeek": {$week: ISODate("2022-04-07T21:24:36.000Z")},
}
},
{
$project: {
data: "$$ROOT",
weeksOrder: [
"WeekOne",
"WeekTwo",
"WeekTree",
"WeekFour",
"WeekFive",
"WeekSix"
],
weekIndex: {$subtract: ["$currentWeek", "$weekNum"]
}
}
},
{
$project: {
data: 1,
weekGroup: {"$arrayElemAt": ["$weeksOrder", "$weekIndex"]}
}
},
{
$group: {
_id: "$weekGroup",
week: {$first: "$weekGroup"},
data: {$push: "$data"}
}
}
])
正如你在操場上看到的那樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457722.html
