我正在尝试使用mongodb的ObjectID对给定集合的插入时间进行范围查询。我无法找到任何可能的文档,除了这篇博文:http://mongotips.com/b/a-few-objectid-tricks/。
我想获取在给定时间戳之后创建的所有文档。使用nodejs驱动程序,这就是我所拥有的:
var timeId = ObjectId.createFromTime(timestamp);
var query = {
localUser: userId,
_id: {$gte: timeId}
};
var cursor = collection.find(query).sort({_id: 1});
我总是获得相同数量的记录(27个集合中的19个),与时间戳无关。我注意到createFromTime只填充与时间相关的objectid中的字节,其他的则保留为0(如下所示:4f6198be0000000000000000)。
我尝试使用ObjectID的原因是,在mongodb服务器上插入文档时需要时间戳,而不是在将文档传递给节点中的mongodb驱动程序时。
任何人都知道如何使这项工作,或者有另一个想法如何生成和查询在mongodb服务器上生成的插入时间?
答案 0 :(得分:0)
不确定ruby中的nodejs驱动程序,你可以简单地应用这样的范围查询。
jan_id = BSON::ObjectId.from_time(Time.utc(2012, 1, 1))
feb_id = BSON::ObjectId.from_time(Time.utc(2012, 2, 1))
@users.find({'_id' => {'$gte' => jan_id, '$lt' => feb_id}})
确保
var timeId = ObjectId.createFromTime(timestamp)
正在创建一个ObjectId。
也可以在没有本地用户的情况下尝试查询