使用 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 按周/月/年对文档进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?

node.js如何删除数组子文档的元素?

hive中如何进行按周计算

hive中如何进行按周计算

按周/月/等和 ActiveRecord 分组?

资源 | Node.js全套资源(视频+文档+源码)