0

我试图找出创建具有毫秒级时间戳的文档的最有效方法。经过一番鬼混,我目前的做法如下:

我的时间戳最初是 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?......然后为每个字段创建索引?有更好的方法吗?

谢谢,

抢。

4

1 回答 1

1

您应该使用 MongoDB 日期类型。这以比字符串更有效的格式存储日期,并且包括毫秒精度。然后,您可以在字段上拥有一个索引,您可以使用任何日期/时间进行查询。

我还建议阅读http://blog.pythonisito.com/2012/09/mongodb-schema-design-at-scale.html,其中有一些关于在 MongoDB 中存储时间序列数据的建议,特别是如果你正在做很多更新。

于 2013-07-29T10:59:59.140 回答