ObjectID是由精确到秒的时间戳再加上机器标识等信息组成的,并且建有索引,因此ObjectID本身就可以用于按时间范围查询数据,而不用专门另建时间戳字段和索引。
下面用javascript代码片段说明如何使用ObjectID查询某一时间范围内的数据:
function timeToObjId( time ) {
var t = new Date(time);
t = t.getTime()/1000; // 转换成秒数
return t.toString(16)+'0000000000000000'; // 转换成16进制的字符串,再加补齐16个0
}
var objIdTimeFrom = timeToObjId( '2015-08-01 10:42:01' );
var objIdTimeTo = timeToObjId( '2015-08-01 10:42:59' );
// 查询MongoDB数据库
db.table1.find({
'_id': {
'$gt': ObjectId( objIdTimeFrom ),
'$lt': ObjectId( objIdTimeto )
}
}).sort({
'_id': 1
});
欢迎来公众号《意庭斯言》找我!