如何在 mongodb 中减去两个日期时间
How to subtract two date time in mongodb
我用过聚合函数
db.checkins.aggregate([
{$match: {checkinType: "Beacon",
"associationIds.organizationId":"af39bc69-1938-4149",
"checkinData.time": {"$gte": new Date("2018-01-18T18:30:00.000Z"),
"$lt": new Date("2018-01-19T18:30:00.000Z")}
}
},
{"$sort":{"checkinData.time":-1}},
{$group: {"_id":
{"orgId":"$asst.organizationId", "userId":"$asst.userId"},
"lastSeen":{"$first":"$checkinData.time"},
"firstSeen":{"$last":"$checkinData.time"},
}
},
{"$project":{"_id":1,"lastSeen":1, "firstSeen":1,
totalHourSpent:{$subtract: ["$lastSeen","$firstSeen"]}}},
])
When I performed this Query mongo return totalHourSpent in milisecond which is given below.
{
"_id" : {
"orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
"userId" : "34adb4a0-0012-11e7-bf32-cf79d6b423e9"
},
"lastSeen" : ISODate("2018-01-19T18:49:52.242+05:30"),
"firstSeen" : ISODate("2018-01-19T10:08:21.026+05:30"),
"totalHourSpent" : NumberLong("31291216")
},
{
"_id" : {
"orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
"userId" : "679416b0-3f88-11e7-8d27-77235eb1ba9b"
},
"lastSeen" : ISODate("2018-01-19T20:51:30.946+05:30"),
"firstSeen" : ISODate("2018-01-19T11:07:44.256+05:30"),
"totalHourSpent" : NumberLong("35026690")
},
How to calculate totalHourSpent in hour. Thanks in advance.
$subtract 以毫秒为单位提供持续时间。所以我们需要将持续时间除以 3600000 为小时格式。
返回的米尔数可以通过除以 3600000(1 小时内的毫秒数)转换为小时:
totalHourSpent:{$divide : [{$subtract: ["$lastSeen","$firstSeen"]}, 3600000]}
即
35026690÷3600000=9.72963611111111 hours
组,计数,平均
减去值 return 以毫秒为单位
const avgTime = await Post.aggregate<{
count?: string;
avg_time: string;
}>([
{
$match: {
finishedAt: {
$exists: true,
},
},
},
{
$group: {
_id: null,
count: {
$sum: 1,
},
avg_time: {
$avg: {
// $subtract: [
// {
// $ifNull: ['$finishedAt', 0],
// },
// {
// $ifNull: ['$createdAt', 0],
// },
// ],
$subtract: ['$finishedAt', '$createdAt'],
//$subtract: [{ $toDate: '$finishedAt' }, { $toDate: '$createdAt' }],
},
},
},
},
]);
了解更多信息
我用过聚合函数
db.checkins.aggregate([
{$match: {checkinType: "Beacon",
"associationIds.organizationId":"af39bc69-1938-4149",
"checkinData.time": {"$gte": new Date("2018-01-18T18:30:00.000Z"),
"$lt": new Date("2018-01-19T18:30:00.000Z")}
}
},
{"$sort":{"checkinData.time":-1}},
{$group: {"_id":
{"orgId":"$asst.organizationId", "userId":"$asst.userId"},
"lastSeen":{"$first":"$checkinData.time"},
"firstSeen":{"$last":"$checkinData.time"},
}
},
{"$project":{"_id":1,"lastSeen":1, "firstSeen":1,
totalHourSpent:{$subtract: ["$lastSeen","$firstSeen"]}}},
])
When I performed this Query mongo return totalHourSpent in milisecond which is given below.
{
"_id" : {
"orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
"userId" : "34adb4a0-0012-11e7-bf32-cf79d6b423e9"
},
"lastSeen" : ISODate("2018-01-19T18:49:52.242+05:30"),
"firstSeen" : ISODate("2018-01-19T10:08:21.026+05:30"),
"totalHourSpent" : NumberLong("31291216")
},
{
"_id" : {
"orgId" : "af39bc69-1938-4149-b9f7-f101fd9baf73",
"userId" : "679416b0-3f88-11e7-8d27-77235eb1ba9b"
},
"lastSeen" : ISODate("2018-01-19T20:51:30.946+05:30"),
"firstSeen" : ISODate("2018-01-19T11:07:44.256+05:30"),
"totalHourSpent" : NumberLong("35026690")
},
How to calculate totalHourSpent in hour. Thanks in advance.
$subtract 以毫秒为单位提供持续时间。所以我们需要将持续时间除以 3600000 为小时格式。
返回的米尔数可以通过除以 3600000(1 小时内的毫秒数)转换为小时:
totalHourSpent:{$divide : [{$subtract: ["$lastSeen","$firstSeen"]}, 3600000]}
即
35026690÷3600000=9.72963611111111 hours
组,计数,平均
减去值 return 以毫秒为单位
const avgTime = await Post.aggregate<{
count?: string;
avg_time: string;
}>([
{
$match: {
finishedAt: {
$exists: true,
},
},
},
{
$group: {
_id: null,
count: {
$sum: 1,
},
avg_time: {
$avg: {
// $subtract: [
// {
// $ifNull: ['$finishedAt', 0],
// },
// {
// $ifNull: ['$createdAt', 0],
// },
// ],
$subtract: ['$finishedAt', '$createdAt'],
//$subtract: [{ $toDate: '$finishedAt' }, { $toDate: '$createdAt' }],
},
},
},
},
]);
了解更多信息