【问题标题】:Grouping documents by week/month/year using Node js使用 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 }
    }
 )

【问题讨论】:

  • 那么你尝试了什么?
  • 我尝试了在 stackoverflow 上找到的几个请求,一些计算特定年/月/周内的条目,一些对条目进行排序,但我找不到获取文档数组的解决方案.我尝试使用 agregate 和 $group,但我什至只使用 mongo 都无法获得我想要的东西,更不用说 node js。我将不胜感激有关如何着手解决此类问题的提示。

标签: node.js date group-by mean


【解决方案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);

如果有人有时间评论我如何组织我的文件,如果它有任何意义,或者是否有任何“更清洁”的方式,我将不胜感激,谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多