作为mongo的新手,我在mongo手册中读到了有关优化对象ID的信息。
关于不创建单独的Created_On字段的建议,我决定稍后从_id
字段中提取日期ObjectID
现在,我有很多记录都没有Created_On字段。
我正在尝试查询日期范围,但我不确定语法:
$start = new MongoDate(strtotime("2012-03-01 00:00:00"));
$end = new MongoDate(strtotime("2012-03-15 00:00:00"));
$collection->find(array('_id' => array('$gt' => $start, '$lte' => $end)));
始终返回0结果。虽然我可以查询单个记录并从对象中提取日期。
答案 0 :(得分:13)
在PHP中,您需要执行以下操作:
function timeToId($ts) {
// turn it into hex
$hexTs = dechex($ts);
// pad it out to 8 chars
$hexTs = str_pad($hexTs, 8, "0", STR_PAD_LEFT);
// make an _id from it
return new MongoId($hexTs."0000000000000000");
}
$start = strtotime("2012-03-01 00:00:00");
$end = strtotime("2012-03-15 00:00:00");
$collection->find(array('_id' => array('$gt' => timeToId($start), '$lte' => timeToId($end))));
然后您可以使用它来查询_id字段。
我在这里写了一篇博客文章描述了这个过程:http://www.snailinaturtleneck.com/blog/2011/12/20/querying-for-timestamps-using-objectids/