ObjectID是由精确到秒的时间戳再加上机器标识等信息组成的,并且建有索引,因此ObjectID本身就可以用于按时间范围查询数据,而不用专门另建时间戳字段和索引。
下面用javascript代码片段说明如何使用ObjectID查询某一时间范围内的数据:
[javascript]
- 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
- });