mongodb中的日期操作和比较

时间:2018-11-01 18:36:36

标签: node.js mongodb

我有一个具有以下属性的文档

{
    _id: '1234',
    daysToExpire: 7,
    createdOn: 2018-10-16 08:06:19.856 (stored as a date in mongo)
}

我正在尝试写一个聚合,上面写着

伪代码:

is the current date > $createdOn + $daysToExpire

我想最好的方法是将$createdOn转换为数字,然后加上1000 * 60 * 60 * 24 * $daysToExpire

我尝试了以下无效的方法

$match: {
    createdOn: {
        $gt: [{ $add: ['$createdOn', '$daysToExpire']}, '$currentDate']
    }
}

$match: {
    createdOn: {
      $gt: { $subtract: ['$currentDate', '$daysToExpire' ] }
    }
}

1 个答案:

答案 0 :(得分:1)

从技术上讲,您需要$match$expr来进行一些过滤计算。在$expr内部,您可以仅使用$add,如果第一个参数为 ISODate ,则将第二个参数视为毫秒数。以下代码适用于4.0:

db.col.aggregate([
    {
        $match:{
            $expr: {
                $gt: [ new Date(), // now as ISODate
                        { 
                            $add: [ 
                                "$createdOn", 
                                { $multiply: [ "$daysToExpire", 1000 * 60 * 60 * 24  ] } 
                            ] 
                        } 
                    ]
            }
        }
    }
])