假设我在名为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