我试图找出创建具有毫秒级时间戳的文档的最有效方法。经过一番鬼混,我目前的做法如下:
我的时间戳最初是 boost::posix_time::ptime 格式。我可以使用 boost::posix_time::time_from_string 函数从毫秒级时间戳字符串创建一个 ptime 对象:
std::string ts("2012-01-20 15:47:59.223");
ptime pt (time_from_string(ts));
然后我可以将 ptime 对象转换为 mongo:DateT 对象:
mongo::Date_t dt = convert(pt);
其中 convert 定义为:
mongo::Date_t convert(const boost::posix_time::ptime& pt)
{
boost::posix_time::ptime epoch(boost::gregorian::date(1970,boost::date_time::Jan,1));
boost::posix_time::time_duration d = pt - epoch;
return mongo::Date_t(d.total_milliseconds());
}
然后我将 Date_t 对象附加到 mongo::BSONObjBuilder 的一个实例:
mongo::BSONObjBuilder builder;
builder.genOID();
builder.appendDate ("datetime", dt );
最后,创建一个 BSONObj 并插入到数据库中。
BSONObj doc = builder.obj();
mongo.insert(collection, doc);
在这种最有效的方法?我需要能够以毫秒级别搜索数据库。我还需要能够分别查询日期和时间。是不是需要多加两个字段,这样就有了三个时间相关的字段:datetime、date、time?......然后为每个字段创建索引?有更好的方法吗?
谢谢,
抢。