在具有格式化ISOdate

时间:2017-04-14 09:05:18

标签: mongodb

我有一个包含时间对象数组的集合,我想在最后一天内获取记录,但我似乎无法弄清楚这一点。

我是mongodb的新手,我一直在使用SQL,所以也许这就是解决这个问题的方法。

收集:

{
    "_id" : ObjectId("58eb9f8738505a28267a6cd6"),
    "times" : [ 
        {
            "date" : "2017-04-13 14:16:47.000000",
            "timezone_type" : 1,
            "timezone" : "+00:00"
        }, 
        {
            "date" : "2017-04-10 14:16:47.000000",
            "timezone_type" : 1,
            "timezone" : "+00:00"
        }
    ],
    "title" : "Awesome title",
    "user" : 1,
    "description" : " cool!",
    "updated_at" : ISODate("2017-04-10T15:06:47.000Z"),
    "created_at" : ISODate("2017-04-10T15:06:47.000Z")
}

我的mongodb查询

db.getCollection('reminders').find({
        "times": {
            $elemMatch: { 
                "date": { 
                    $gte:  {                    
                        $dateToString: {
                            format: "%Y-%m-%d %H:%i:%s.%L",
                            date: new Date(ISODate().getTime() - 1000 * 3600 * 24 * 1)
                        }
                    }
                }
            }
        }
})

现在我在$ dateToString对象中得到“错误:第3行:意外的令牌:”。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

$dateToString运算符只能用作聚合运算符。

对于find()方法用法,您必须自己操纵日期格式。有几个库可以做到这一点,但手动操作也相当容易:

> var date = new Date(ISODate().getTime() - 1000 * 3600 * 24 * 1)
> date
ISODate("2017-04-13T17:47:49.666Z")
> var bound = date.toISOString().replace("T", " ").substr(0, 20).concat("000000")
> bound
2017-04-13 17:47:49.000000

db.getCollection('reminders').find({
    "times": { $elemMatch: { "date": {$gte:  bound} } }
})