mongodb在每个文档中查找三个键的最早日期

时间:2019-04-13 01:50:13

标签: mongodb aggregation-framework

我有一个如下所示的文档架构:

{
    status: String,
    estimateDate: Date,
    lostDate: Date,
    soldDate: Date,
    assignedDate: Date
}

使用此模式,所有三个日期都可能存在,并且都不存在。我需要对所有三个进行检查,如果不存在,则使用最早的日期,如果不存在,则使用今天的日期。使用“返回”日期,获得与另一个键(assignedDate)的天数差。我已经想出了一个约会该怎么做,但是却不知道该如何扩大到包括所有三个键。下面是我一键可用的工作代码。

在总管道$ project阶段中,我将执行以下操作:

days: {
    $cond: {
        if: {
            $not: ["$date1"]
        },
        then: {
            $floor: {
                $divide: [
                    {
                        $subtract: [new Date(), "$assignedDate"]
                    },
                    1000 * 60 * 60 * 24
                ]
            }
        },
        else: {
            $floor: {
                $divide: [
                    {
                        $subtract: [
                            "$estimateDate",
                             "$assignedDate"
                        ]
                    },
                    1000 * 60 * 60 * 24
                ]
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果其中不存在日期,则可以使用$min$ifNull运算符来获取最早的日期,并指定new Date()作为默认值:

db.col.aggregate([
    {
        $project: {
            oldest: {
                $min: [
                    { $ifNull: [ "$lostDate", new Date() ] },
                    { $ifNull: [ "$soldDate", new Date() ] },
                    { $ifNull: [ "$assignedDate", new Date() ] },
                ]
            }
        }
    }
])