Mongodb,按日期差异分组并获取小时
Mongodb, group by datediff and getting hour
我实际上正在开发一个应用程序,我需要从我的数据库中获得一些信息:
- 我有一个培训模型,其中有一个用户
- 训练模型有开始日期和结束日期,都是date格式,所以mongodb可以使用ISODate()
我需要的是由用户获得日期差异的所有"培训",但以小时为格式。例如,如果培训开始于2015年2月24日08:00:00,结束于2015年02月24日10:00:00,则我需要"2"小时。
以下是我实际拥有的:
@TraitementNettoyage.aggregate([
{$group: {'_id': {user: '$user'}, time: {'$subtract': ['$dateSortie', '$dateEntre']}}},
{$sort: {_id: 1}}
]).exec((err, res)=>
console.log res
)
这个请求不起作用,告诉我$减法是一个未知的群运算符。
编辑:我会用$减法,但我不知道如何分组。你能帮我吗?
这是我的无组新代码:
Traitement.aggregate([
{$project: {total: {$subtract: ['$dateSortie', '$dateEntre']}}},
{$sort: {_id: 1}}
]).exec((err, res)=>
console.log res
)
最后一部分是根据用户属性对其进行分组,我不知道如何使其工作:-/
编辑2:
我需要的文件:
[{
"_id": {
"user": {
"_id": "5512a66db54f879c2887411f",
"userLastname": "Toto",
"userFirstname": "Toto"
},
"total": 17824
}
},
{
"_id": {
"user": {
"_id": "551408741ad3b66c19978e9a",
"userLastname": "Foo",
"userFirstname": "Foo"
},
"total": 939
}
}]
这里有一个简单的"培训"文件:
{"_id" : ObjectId("55153711eba735e4311f92a0"),
"dateEntre" : ISODate("2015-03-27T10:55:13.069Z"),
"dateSortie" : ISODate("2015-03-27T10:55:18.018Z"),
"user" : ObjectId("5512a66db54f879c2887411f"),
"__v" : 0
}
我真正需要的是:
按用户分组的所有(dateSortie dateEntre)的总和。
T高级的银行
根据我在你的问题中所理解的(你实际上需要提供一对带有模式的文档样本),如果你的Traitement
模型具有以下结构,例如:
/* 0 */
{
"_id" : 1,
"user" : "abc",
"dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T13:00:00.000Z")
}
/* 1 */
{
"_id" : 2,
"user" : "jkl",
"dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T10:30:00.000Z")
}
/* 2 */
{
"_id" : 3,
"user" : "jkl",
"dateEntre" : ISODate("2014-03-01T12:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T18:00:00.000Z")
}
聚合框架将有一个$project
管道操作,在该操作中,您可以使用$subtract
运算符获得两个日期之间的差异,然后使用$divide
操作符将以毫秒为单位的日期差异转换为小时。管道中的最后一个阶段是使用$group
运算符对上一管道中的文档进行分组,并使用$sum
日期差中的小时数:
Traitement.aggregate([
{
$project: {
user: 1,
dateDifference: {
$divide: [{
$subtract: [ "$dateSortie", "$dateEntre" ]
}, 1000*60*60
]
}
}
},
{
$group: {
_id: "$user",
total : {
$sum : "$dateDifference"
}
}
}
])
结果:
/* 0 */
{
"result" : [
{
"_id" : "jkl",
"total" : 8.5
},
{
"_id" : "abc",
"total" : 5
}
],
"ok" : 1
}
相关文章:
- 引导时间选择器在增加或减少小时和分钟的同时获取 NaN
- Mongodb,按日期差异分组并获取小时
- 如何使用moment.js获取24小时内日期之间的时差
- 获取元素左侧的像素Javascript似乎只有在窗口稍微调整大小时才起作用
- 从 javascript 中的字符串中获取差值(小时)
- 使用 Date.js 解析 12 小时格式时获取 null
- 获取列高和宽度,并在调整大小时更新
- 从天气 API 获取每小时信息
- 调整列大小时,我将如何获取网格面板的列宽
- 从时间戳中获取天数小时分钟数
- 根据小时获取时间
- 在 JavaScript 中获取一些添加了小时的日期
- 获取当前时间和中午 12 点之间的小时和分钟差异
- 获取特定小时的记录以及相应数据的平均值
- 完整日历时刻:获取当前时间加2小时
- 如何在javascript中获取日期选择器值的完整(包括小时、分钟和秒)日期格式
- 获取时区时差(以小时为单位)
- 调整窗口大小时,获取新宽度和最后一个宽度
- 获取24小时格式的时间,并使用Javascript AngularJS将其保存在任意变量中
- 从下拉菜单中获取小时分钟值,仅在javascript中的setInterval()中进行初始化