gpt4 book ai didi

c++ - 使用 C++ 驱动程序向 MongoDB 添加毫秒时间戳的最有效方法

转载 作者:行者123 更新时间:2023-11-28 07:30:07 25 4
gpt4 key购买 nike

我正在尝试找出创建具有毫秒级时间戳的文档的最有效方法。经过一番折腾后,我目前的做法如下:

我的时间戳最初是 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);

其中转换定义为:

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?.........然后为这些字段中的每一个创建索引?有没有更好的方法?

谢谢,

罗布。

最佳答案

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

我还建议阅读 http://blog.pythonisito.com/2012/09/mongodb-schema-design-at-scale.html其中有一些关于在 MongoDB 中存储时间序列数据的建议,尤其是当您进行大量更新时。

关于c++ - 使用 C++ 驱动程序向 MongoDB 添加毫秒时间戳的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17900049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com