【发布时间】:2019-10-21 20:34:04
【问题描述】:
我正在尝试获取 2 个 ISODates 之间的天数差异并将其放在天数字段中。我有以下这些文件:
{
created_at: ISODate("2019-06-06TT00:00:00Z"),
completed_at: "2019-06-08"
},
{
created_at: ISODate("2019-06-06TT00:00:00Z"),
completed_at: null
},
{
created_at: ISODate("2019-06-06TT00:00:00Z"),
completed_at: "2019-06-04"
}
到目前为止,我尝试的是获取毫秒数。但我不想那样。我只想减去日期并得到天数的差异。
db.collection.aggregate([
{
$addFields: {
completed_at: {
$ifNull: [
{
"$dateFromString": {
"dateString": "$completed_at"
}
},
new ISODate()
]
}
}
},
{
$addFields: {
days: {
$cond: [
{"$lte": ["$completed_at", "$created_at"]},
0,
{
$divide: [
{
$subtract: [
"$completed_at",
"$created_at"
]
},
86400000
]
}
]
}
}
},
{
$project: {
_id: 0,
created_at: 1,
completed_at: 1,
days: 1
}
}
])
如果completed_at 字段是null,那么它的值应该是当前日期。如果completed_at 小于created_at,则days 为0。假设当前日期为2019 年6 月6 日,所需结果应为:
{
days: 2
},
{
days: 0
},
{
days: 0
}
【问题讨论】:
-
“我只想减去日期并得到天数的差异”是什么意思。能详细解释一下吗?
-
我想得到 2 个日期之间的差异,不考虑时间。
-
你得到的正是上面的查询,对吗?
-
假设我的 created_at 是今天下午 12 点,而我的 completed_at 是昨天,没有指定时间。结果应该是 1 但我上面的汇总结果就像 0.1234 一样。所以我必须删除日期中的时间才能得到我想要的输出。
标签: mongodb aggregation-framework