MongoDB推文数据库的日期范围查询失败

时间:2011-12-10 21:48:47

标签: mongodb

我正在尝试对mongo数据库中的推文集合执行范围查询。由于某种原因,以下查询将起作用:

db.posts.find({'created_at': {$gte:"Fri Nov 25 00:00:00 +0000 2011", $lt:"Fri Nov 25 23:59:59 +0000 2011"}})

但以下情况不会:

db.posts.find({'created_at': {$gte:"Thu Nov 24 00:00:00 +0000 2011", $lt:"Fri Nov 25 23:59:59 +0000 2011"}})

我将推文作为JSON对象直接输入到数据库中,所以这应该不是问题,对吗?

2 个答案:

答案 0 :(得分:5)

您需要确保使用的是真正的日期值,而不是字符串。例如:

var from = ISODate("2011-11-24")
var to = ISODate("2011-11-25T23:59:59")
db.posts.find({ created_at : { $gte : from, $lt : to } })

除了确保您的查询使用实际日期值之外,还要确保您的存储数据也包含实际日期值。

答案 1 :(得分:1)

您的查询的问题是您正在将字符串与数据对象进行比较,而该数据对象无效。 如果你使用shell,你可以这样写:

db.testing.find({
   'date': {
        $lt : new Date(2013,10,1),
        $gte : new Date(2000,10,1)
   }
})

最终会将其转化为此

db.testing.find({
   "date" : {
        "$lt" : ISODate("2013-11-01T00:00:00Z"),
        "$gte" : ISODate("2000-11-01T00:00:00Z")
   }
})

range queries

dates