[英]Using Reduce Method with Express JS and Node JS
我正在尝试从 MongoDB 获取数据并构建 API 以将数据发送到我的 React 应用程序。 这是我的路由器和 app.js 代码:
应用程序.js
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
app.use(bodyParser.json());
//import routes
const apiRoute = require('./routes/api');
app.use('/api', apiRoute);
//MONGODB CONNECTION
mongoose.connect('mongodb://**[MY LINK TO MONGODB]** },
() => console.log('connected to real DB')
);
//LISTENING TO PORT
app.listen(5000);
api.js
const express = require('express');
const router = express.Router();
const Api = require('../models/Api');
router.get('/', async (req, res) => {
try{
const first_api = await Api.find({ code: 'FORM', createdDate: {
$gte: new Date(Date.UTC(2021, 4, 16)), //since 01/05/2021
$lte: new Date(Date.UTC(2021, 4, 31))}}, //until 31/05/2021
['createdDate'])
.sort( { createdDate: -1 });
res.json(first_api);
console.log(first_api);
}catch (err) {
res.json({message: err});
}
});
数据“first_api”的格式如下:
[
{
"code":"FORM",
"createdDate":"2021-05-17T07:09:29.740Z"
},
{
"code":"FORM",
"createdDate":"2021-05-17T06:49:34.714Z"
},
...
]
我想要做的是添加一个额外的 function 来计算每个月代码 =“FORM”的条目数,预期的 output 将是:
[
{
"January": 1,
"February: 4,
"March": 6,
"April": 4,
"May": 45,
...
}
]
我尝试使用 reduce 方法添加 function 但我不确定应该将它放在我的代码中的哪个位置
var string1 = JSON.stringify(first_api);
var result = string1.reduce((r, { createdDate }) => {
var key = new Date(createdDate).getMonth() +1;
r[key] = (r[key] || 0) + 1;
return result;
}, {});
我只想在每次调用路由器时将结果作为 API 发送到我的 React 前端。 我不知道在 api.js / app.js 中插入减少 function 以实现我的目标。 将其插入到 route.get function 时出现错误。
仅供参考:由于访问权限问题,我无法使用 MongoDB 的聚合 function。 我只能从数据库中提取原始数据并自己进行操作。
请帮忙。
首先,欢迎来到 StackOverflow
正如我在评论中所写的那样,我建议您利用 MongoDB 聚合 API 的惊人功能并在服务器本身中执行所有这些工作,因此它不仅速度超快,而且通过线路导航的数据更少,而且没有在后端进行更多处理。
如果您无法将其作为 MongoDB 聚合(当您标记为 Mongoose 时,他们有一个完整的部分),您可以使用Lodash或 Array.reducer(),这取决于您想要 Z783E6221F6393D11...这是一个例子
const data = [ { "code": "FORM", "createdDate": "2021-05-17T07:09:29.740Z" }, { "code": "FORM", "createdDate": "2021-05-17T06:49:34.714Z" }, { "code": "FORM", "createdDate": "2021-01-17T06:49:34.714Z" }, { "code": "FORM", "createdDate": "2021-03-17T06:49:34.714Z" } ]; console.log('lodash', _.chain(data).groupBy(x => ((new Date(x.createdDate)).toLocaleString('default', { month: 'long' }))).toPairs().map(x => ({ [x[0]]: x[1].length })).value() ); console.log('reducer', data.reduce((acc, cur) => { const month = (new Date(cur.createdDate)).toLocaleString('default', { month: 'long' }); acc[month]? acc[month] += 1: acc[month] = 1; return acc; }, {}) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.