使用 Node js 按周/月/年对文档进行分组
Posted
技术标签:
【中文标题】使用 Node js 按周/月/年对文档进行分组【英文标题】:Grouping documents by week/month/year using Node js 【发布时间】:2021-04-29 08:06:45 【问题描述】:我目前正在开发一个收银机应用程序。我正在使用模型控制器视图存储库设计。我有一个包含产品的购物车模型,当销售得到验证时,它会克隆购物车并添加日期。 我的问题是:如何在给定年份的特定时间段内完成所有销售。 我想要的示例:«http://localhost:PORT/sales/month/3» 将在 3 月完成所有销售,«http://localhost:PORT/sales/month/3/week/1» 将获得所有销售都在三月的第一周完成等等...... 我尝试了几件事,但我仍然迷失在 MEAN 堆栈中。谢谢,我希望我的帖子不会太混乱
编辑:有了更多的了解,我设法列出了我想要的东西,但我目前不知道如何使用我的设计来实现它。代码如下:
db.ventes.aggregate(
$project :
month : $month : "$dateVente",
year :$year : "$dateVente",
_id : 1
,
$match : month : 1 ,year : 2021
)
【问题讨论】:
那么你尝试了什么? 我尝试了在 *** 上找到的几个请求,一些计算特定年/月/周内的条目,一些对条目进行排序,但我找不到获取文档数组的解决方案.我尝试使用 agregate 和 $group,但我什至只使用 mongo 都无法获得我想要的东西,更不用说 node js。我将不胜感激有关如何着手解决此类问题的提示。 【参考方案1】:我设法找到了解决方案。
这是我的仓库:
exports.findByMonth = async payload =>
return await Vente.aggregate([
$project :
date: "$dateVente",
month : $month : "$dateVente",
year : $year : "$dateVente",
subTotal: 1,
_id : 1
,
$match : month : payload.month ,year : payload.year
]
)
这是我的控制器:
exports.getVenteByMonth = async (req, res) =>
try
let targetDate =
month: req.body.month,
year: req.body.year
let ventesByMonth = await venteRepository.findByMonth(targetDate)
res.status(200).json(
status: true,
data: ventesByMonth
)
catch (err)
res.status(500).json(
status: false,
error: err
)
这是结果:
"status": true,
"data": [
"_id": "600ab585a16ea2072ce0e0f5",
"subTotal": 196,
"date": "2021-01-22T11:22:40.876Z",
"month": 1,
"year": 2021
,
"_id": "600c391b5b0612027d9f75c2",
"subTotal": 115,
"date": "2021-01-23T14:46:14.846Z",
"month": 1,
"year": 2021
,
"_id": "600c3bdf2cca74037320520f",
"subTotal": 0,
"date": "2021-01-23T15:08:10.683Z",
"month": 1,
"year": 2021
,
"_id": "600c3fd76acde803e589c7ff",
"subTotal": 147,
"date": "2021-01-23T15:25:02.032Z",
"month": 1,
"year": 2021
]
这是我的路线:
router.get("/monthly", venteController.getVenteByMonth);
如果有人有时间评论我如何组织我的文件,如果它有任何意义,或者是否有任何“更清洁”的方式,我将不胜感激,谢谢!
【讨论】:
以上是关于使用 Node js 按周/月/年对文档进行分组的主要内容,如果未能解决你的问题,请参考以下文章