【发布时间】:2021-11-24 15:00:27
【问题描述】:
上下文
这个问题使用与我的另一个问题相同的集合/文档架构构造:MongoDB: Creating calculated fields using the switch function (column aliasing)
数据架构
注意:cal_date1 是我在上面链接的其他帖子中显示的计算值。执行这些步骤时,它们是在管道中完成的,因此(我希望)计算的列可以被视为通用文档架构的一部分,如下所示。
{
_id:ObjectId("619756f12c115f24df503c26"),
uniqueid:"12345678",
date1:"2021-11-02 20:04:50.253",
date2:"2021-11-03 18:10:57.520",
date3:"2021-11-08 07:08:00.000",
date4:"2021-11-08 14:40:00.000",
date5:"2021-11-08 08:34:00.000",
cal_date1: "2021-11-03 18:10:57.520"
}
问题
如何计算两个特定日期之间的日期值差异(背后有一些条件逻辑)。
扩展
有没有一种方法可以计算两个日期之间的工作日,其中“工作”被定义为包括周一至周五(不包括周六、周日)在内的日期?
试过
我一直在switch 函数中使用$dateDiff 运算符,如下所示但是遇到错误 unknown operator: $cal_date1
db.collection.aggregate([
{
$project:
{
"uniqueid": 1,
"date1": 1,
"date2": 1,
"date3": 1,
"date4":1,
"date5": 1,
"cal_date1": {
$switch: {
branches: [
{ case: {$ne:["$date2",null]}, then: "$date2"},
{ case: {$ne:["$date3",null]}, then: "$date3"},
{ case: {$ne:["$date4",null]}, then: "$date4"},
{ case: {$ne:["$date5",null]}, then: "$date5"}
],
default: "blank"
}
},
"cal_date2": {
$switch: {
branches: [
{ case: {$ne:["$date4",null]}, then: "$date4"},
{ case: {$ne:["$date4",null]}, then: "$date5"}
],
default: "blank"
}
},
"cal_date3": {
$switch: {
branches: [
{ case: {$ne:["$date5",null]}, then: "$date5"}
],
default: "blank"
}
}
}
}
])
--updated code
"cal_days_between_date1_caldate1": {
$switch:
{
branches: [
{case: { $eq: ["$date1", null]}, then: "blank"},
{case: { $eq: ["$cal_date1", "blank"]}, then: "blank"}
],
default: {
$dateDiff: {
startDate: {
$dateFromString: {
dateString: "$date1"
}
},
endDate: {
$dateFromString: {
dateString: "$cal_date1"
}
},
unit: "day"
}
}
}
}
更新:2021 年 11 月 24 日:世界标准时间 T3:08pm
稍微更改了case 表达式以尝试获得布尔输出,现在出现unknown operator: $dateDiff 的新错误
更新:2021 年 11 月 30 日:世界标准时间晚上 8 点 36 分
已添加包含引用字段(代码块顶部)的代码以及 $dateFromString 运算符的添加。计算出的日期代码旨在作为我与其他字段一起输出的管道中的下一步。
【问题讨论】:
标签: mongodb mongodb-query mongodb-compass