在哪里处理 MERN 堆栈上的数据?

Posted

技术标签:

【中文标题】在哪里处理 MERN 堆栈上的数据?【英文标题】:Where to process data on MERN stack? 【发布时间】:2020-09-18 06:17:33 【问题描述】:

我正在构建一个基于 MERN Stack 的费用控制应用程序,我想知道哪种方式最适合处理数据。

更具体地说,我的费用数据有以下模型

  
    "_id" : ObjectId("5eceb10f0b59a200a545c39b"),
    "date" : ISODate("2019-10-10T00:00:00.000Z"),
    "description" : "INTERT BILL",
    "credit" : "",
    "debit" : "-100",
    "category" : "HOME",
    "subcategory" : "INTERNET",
    "__v" : 0
  

如果我想在特定日期按类别对费用进行分组,最好的方法是什么?

在 mongodb 上处理它,通过聚合查询或获取特定日期范围内的所有费用并在发送到客户端之前在 node.js 上对其进行分组?

期望的输出:


  HOME: 
   total: '-300',
   subcategories: [
    
      internet:  total: -100
    ,
    
      water:  total: -200 
    
   ]
  


【问题讨论】:

【参考方案1】:

您应该让 MongoDB 进行分组,尤其是在处理大型数据集时。原因是您可能会通过长时间运行的操作来block the event-loop。这是一个可以帮助您入门的聚合查询:

yourModel.aggregate([
        
            $match: 
                date: yourDateToMatch
            
        ,
         // you need this conversion stage in order to be able to do maths with your debit field
            $addFields: 
                convertedDebit: 
                    $toDecimal: "$debit"
                
            
        ,
        
            $group: 
                _id: "$category",
                total: 
                    $sum: "$convertedDebit"
                ,
                // add grouping options for subcategories
            
        

    ])

然后使用节点返回结果。

【讨论】:

以上是关于在哪里处理 MERN 堆栈上的数据?的主要内容,如果未能解决你的问题,请参考以下文章

MERN 堆栈和 Socket 到 Mongodb - 从数据库到前端的实时数据

如何在 MERN 堆栈中发送响应模式?

保存带有中断的文本区域,MERN 堆栈

使用 MERN 堆栈从服务器到客户端获取数据的错误

如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组

使用 Postman MERN 堆栈在发布请求上收到 404 错误