javascript - 使用对象键中的日期对结果进行分组,并且只计算结果
问题描述
您好,我很难使用 MongoDB 或 Javascript 获得这种复杂的回报。希望有人能教我如何获得这个回报。
管理员。
按 id 分组结果
用户 展平结果
这是数据示例。
let user = [
{
_id: 123,
name: 'John',
createdAt: "2015-08-12T00:00:00Z"
},
{
_id: 124,
name: 'Jane',
createdAt: "2015-09-12T00:00:00Z"
},
{
_id: 125,
name: 'Robert',
createdAt: "2015-09-12T00:00:00Z"
},
{
_id: 126,
name: 'Samson',
createdAt: "2016-11-12T00:00:00Z"
}
]
预期结果
用户
[
{
"15-8": 1 //yyyy-mm: number of data for the month of august
},
{
"15-9": 2
},
{
"16-11": 1
}
]
行政
[
{
"15-8":
{
_id: 123,
count: 1
}
},
{
"15-9": {
_id: 124,
count: 1,
},{
_id: 125,
count: 1
},
{
"16-11": {
_id: 126,
count: 1
}
}
]
解决方案
您应该具有从以格式结果
key
命名的日期字符串中获取的功能getKeyFromDate
YY-MM
例如,循环
user
数据以聚合您的数据reduce
。
let user = [
{
_id: 123,
name: 'John',
createdAt: "2015-08-12T00:00:00Z"
},
{
_id: 124,
name: 'Jane',
createdAt: "2015-09-12T00:00:00Z"
},
{
_id: 125,
name: 'Robert',
createdAt: "2015-09-12T00:00:00Z"
},
{
_id: 126,
name: 'Samson',
createdAt: "2016-11-12T00:00:00Z"
}
];
const getKeyFromDate = (dateString) => {
var date = new Date(dateString);
var year = date.getFullYear().toString().substr(2, 3);
var month = date.getMonth() + 1;
return `${year}-${month}`; // YY-MM
};
var result = user.reduce((acc, {createdAt}) => {
var key = getKeyFromDate(createdAt);
acc[key] = acc[key] || {[key]: 0}; //Also use shortcut like: acc[key] ??= {[key]: 0};
acc[key][key] += 1;
return acc;
}, {});
console.log(Object.values(result));
for..of
如果您不熟悉也可以使用.reduce
var result2 = {};
for(let {createdAt} of user){
var key = getKeyFromDate(createdAt);
result2[key] = result2[key] || {[key]: 0};
result2[key][key] += 1;
}
console.log(Object.values(result2));
推荐阅读
- python - np.tile 的 Numba 兼容实现?
- c++ - Fizz Buzz:理想的解决方案
- artifactory - Jfrog X射线证书问题
- python - 如何在字典的帮助下重新组织列表
- python - prettify 适用于 Soup 但不适用于 Soup1=Soup.find_all
- windows - 如何执行包含空格的 .exe 文件
- delphi - 如何在不显示或打印的情况下执行 TQuickRep(快速报告)?
- python - 如何调试python应用程序中的内存泄漏
- c - 为什么我必须使用双指针而不是单指针来将新值推送到 C 中的链表?
- javascript - 如何将数据发布为 html 格式的文本