具有计算参数的mongodb日期查询

时间:2017-06-07 14:08:34

标签: mongodb

假设我在名为Log的集合中有以下文档:

{
    "_id": ObjectId("5925e1861e61596a647cf31f"),
    "CreatedOn": ISODate("2017-05-24T19:39:50.957Z"),
    "LogType": "Error"
},
{
    "_id": ObjectId("5925e5a51e61586ae0779d43"),
    "CreatedOn": ISODate("2017-05-25T08:57:25.102Z"),
    "LogType": "AuthenticationError"
},
{
    "_id": ObjectId("5925e5aa1e61586ae0779d4c"),
    "CreatedOn": ISODate("2017-05-25T14:57:30.790Z"),
    "LogType": "AuthenticationInfo"
},
{
    "_id": ObjectId("59263c231e61596ae05c627e"),
    "CreatedOn": ISODate("2017-05-26T02:06:27.900Z"),
    "LogType": "Info"
}

我有一个每日提取,将收集特定日期的日志,例如2017-05-25。这个过程是自动化的,因此,我有一个像这样的mongo数据库查询:

var createdOn = "2017-05-25"; // this is actually passed as an input param
db.getCollection('Log').find({
    "CreatedOn": {
        $gte: new ISODate(createdOn),
        $lt: { $add: [new ISODate(createdOn), 24 * 60 * 60 * 1000] } // add 1 day
    }
})

这不起作用;显然$ lt部分是有问题的,但是我无法找到如何解决它尽管尝试了很多次。我通过传递两个参数(边界)而不是一个参数来解决方法,但我想知道我的错误是什么?

感谢Neil,我意识到我可能过度简化了我的问题。这是我实际使用的查询:

db.Log.aggregate(
    [
        {
            $match: {
                "CreatedOn": {
                    $gte: new ISODate(createdOn),
                    $lt: { $add: [new ISODate(createdOn), 24 * 60 * 60 * 1000] } // add 1 day
                }
            }
        },(...)

哪个不起作用,替换为

db.Transaction.aggregate(
    [
        {
            $match: {
                "CreatedOn": {
                    $gte: new ISODate(minDate),
                    $lt: new ISODate(maxDate)
                }
            }
        },(...)

哪种方法可行。我仍然不明白为什么,它可能与我成为一个mongodb新手:-)如果我尝试像

那样它仍然不起作用
$lt: new ISODate(createdOn) + 24 * 60 * 60 * 1000

甚至(取自联系问题,不回答我的)

$lt: Date.now() + 24 * 60 * 60 * 1000 // add 1 day

0 个答案:

没有答案