如何在 mongoDB 中找到差异 b/w 2 个不同格式的日期
How to find difference b/w 2 dates of different formats in mongoDB
我在 mongoDB 中有一个集合,其中包含 2 个字段。
1. mongodate [ISO日期格式]
2. createtime [字符串格式的历元毫秒]
> db.test.find()
{ "_id" : ObjectId("5eb2bbb3b278b3c384106a20"), "mongodate" : ISODate("2020-05-05T19:42:00Z"),"createtime" : "1588366164434" }
{ "_id" : ObjectId("5eb2bcabb278b3c384106a21"), "mongodate" : ISODate("2020-05-05T19:42:00Z"), "createtime" : "1588366164434" }
我需要找到(mongodate 和创建时间的差异)的平均值、最小值和最大值
但是由于这两个字段的日期格式不同,所以我无法正确使用$substract。有人可以帮我解决这个问题吗?
谢谢,
拉胡尔维尔马
createtime
字段看起来可能是纪元以来的毫秒数。
您可以使用 $toLong 运算符在聚合管道中将 ISODate 转换为毫秒,找到与 $subtract
的差异,然后使用 $group
阶段与 $ave
、$min
和 $max
运算符。
db.collection.aggregate([
{$project: {
epoch: {$toLong: "$mongodate"},
createepoch: {$toLong: "$createtime"}
}},
{$project: {
difference: {$subtract: [
"$epoch",
"$createepoch"
]}
}},
{$group: {
_id: null,
min: {$min: "$difference"},
max: {$max: "$difference"},
avg: {$avg: "$difference"}
}}
])
[Playground](https://mongoplayground.net/p/wVMdGLHhFpH)
我在 mongoDB 中有一个集合,其中包含 2 个字段。 1. mongodate [ISO日期格式] 2. createtime [字符串格式的历元毫秒]
> db.test.find()
{ "_id" : ObjectId("5eb2bbb3b278b3c384106a20"), "mongodate" : ISODate("2020-05-05T19:42:00Z"),"createtime" : "1588366164434" }
{ "_id" : ObjectId("5eb2bcabb278b3c384106a21"), "mongodate" : ISODate("2020-05-05T19:42:00Z"), "createtime" : "1588366164434" }
我需要找到(mongodate 和创建时间的差异)的平均值、最小值和最大值
但是由于这两个字段的日期格式不同,所以我无法正确使用$substract。有人可以帮我解决这个问题吗?
谢谢, 拉胡尔维尔马
createtime
字段看起来可能是纪元以来的毫秒数。
您可以使用 $toLong 运算符在聚合管道中将 ISODate 转换为毫秒,找到与 $subtract
的差异,然后使用 $group
阶段与 $ave
、$min
和 $max
运算符。
db.collection.aggregate([
{$project: {
epoch: {$toLong: "$mongodate"},
createepoch: {$toLong: "$createtime"}
}},
{$project: {
difference: {$subtract: [
"$epoch",
"$createepoch"
]}
}},
{$group: {
_id: null,
min: {$min: "$difference"},
max: {$max: "$difference"},
avg: {$avg: "$difference"}
}}
])
[Playground](https://mongoplayground.net/p/wVMdGLHhFpH)