按日期对对象数组进行分组,并在Javascript中获取每天最新的对象
我正在使用expressjs和mongodb构建一个API。我在一个集合中有条目来存储每天包含数据的各种文档。我的查询使用按日期对对象数组进行分组,并在Javascript中获取每天最新的对象,javascript,Javascript,我正在使用expressjs和mongodb构建一个API。我在一个集合中有条目来存储每天包含数据的各种文档。我的查询使用toArray() 我需要获取给定日期(分组)的每个对象,然后获取当天的最新对象,例如: [ { name: 'Edward', events: '900', created_at: '2021-01-20T20:56:42.368+00:00' // date object }, { name: 'Robert', eve
toArray()
我需要获取给定日期(分组)的每个对象,然后获取当天的最新对象,例如:
[
{
name: 'Edward',
events: '900',
created_at: '2021-01-20T20:56:42.368+00:00' // date object
},
{
name: 'Robert',
events: '700',
created_at: '2021-01-19T15:56:42.368+00:00' // date object
}
]
我写了一个函数来尝试这个,但它给了我以下类型的格式
{
'Tue Jan 19 2021 15:56:42 GMT+0000 (Greenwich Mean Time)': [
{
name: 'Robert',
events: '700',
created_at: '2021-01-19T15:56:42.368+00:00'
}
]
}
如何修改我的函数以达到预期的结果。我哪里做错了
函数组databeyonddaily(数据,键='created_at'){
常量组=数据减少((r,a)=>{
r[a.created_at]=[…r[a.created_at]| |[],a]
返回r
}, {})
返回组;
}
当前,您正在按照在
属性处创建的中存储的日期字符串对它们进行分组,但需要按照日期对它们进行分组,然后分别比较一天中的时间
下面的示例代码段根据日期字符串创建一个new Date()
,并计算要用作累加器中键的历元日期。然后,它将以前存储的日期与当前迭代进行比较,并在以后更新。最后,它返回reduce()
调用返回的对象的Object.values()
const input=[{name:'John',events:'600',创建地点:'2021-01-20T14:56:42.368+00:00'},{name:'Edward',events:'900',创建地点:'2021-01-20T20:56:42.368+00:00'},{name:'Jane',events:'100',创建地点:'2021-01-19T13:56:42.368+00:00'},{name:'Robert',events:'700',创建地点:'2021-01-01-195:56:42+00'};
功能组DatabeyondDaily(数据){
常量组=数据减少((a,o)=>{
常数
日期=新日期(o['created_at']),
天=数学地板(日期/8.64e7);//每天86400000毫秒
//let entry=(a[day]??={…o});使用逻辑空赋值
让条目=(a[天]=a[天]|{…o});
if(新日期(条目['created_at'])<日期){
a[天]={……o};
}
归还
}, {})
返回Object.value(组);
}
log(groupDataBeyondDaily(输入))
OK。。。但这并不能回答我所有的问题:)“我需要获取给定日期(分组)的每个对象,然后获取当天最新的对象,例如”您能否提供一个示例,说明结果数据应该是什么样子?您是希望按日期分组,而每个组只保存最近的值,还是希望按日期分组所有值,然后进行筛选?您需要哪种分组标准?截止日期是否足够,或者您是否需要日期和时间?
{
'Tue Jan 19 2021 15:56:42 GMT+0000 (Greenwich Mean Time)': [
{
name: 'Robert',
events: '700',
created_at: '2021-01-19T15:56:42.368+00:00'
}
]
}