我有一个包含时间对象数组的集合,我想在最后一天内获取记录,但我似乎无法弄清楚这一点。
我是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行:意外的令牌:”。 我该如何解决这个问题?
答案 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} } }
})