ミリ秒レベルのタイムスタンプを持つドキュメントを作成する最も効率的な方法を見つけようとしています。私の現在のアプローチをいじった後、次のようになります。
私のタイムスタンプはもともと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);
これで最も効率的なアプローチは?ミリ秒レベルでデータベースを検索できる必要があります。また、日付と時刻を個別に照会できる必要もあります。日時、日付、時刻の 3 つの時間関連フィールドが存在するように、さらに 2 つのフィールドを追加する必要がありますか? ....そして、これらのフィールドごとにインデックスを作成する必要がありますか? より良いアプローチはありますか?
ありがとう、
ロブ。