3

ISODate オブジェクトの MongoDb インターフェイスからナノ秒を失っています。perl で読み取ると、すべてのナノ秒がゼロに設定されます。

まず、私の環境:

MongoDB version: 1.8.2 
perl v5.12.4 
MongoDB perl module version: 0.701.4 

次のように、ISODate としてコード化された rtcTime を持つ Mongo DB があります。

"rtcTime" : ISODate("2013-05-13T18:54:55.918Z")

rtcTime を抽出するコードは次のようになります。

my @results = $db->get_collection( 'timings' )->find( )->all(); 
foreach my $record ( @results ) 
{ 
    print $record->{rtcTime}->nanoseconds()."\n"; 
}

出力はすべて 0 です。

問題を完全に再現するには、MongoDB データベースで任意の (ゼロ以外の) 雇用主エポック値を持つ ISODate オブジェクトを作成します。次に、MongoDB / DateTime / DateTime::Format::ISO8061 モジュールを使用して、あらゆる種類の雇用時間データを抽出してみてください。

Q: MongoDB ISODate データからミリ秒、マイクロ秒、またはナノ秒を取得できないのはなぜですか?

4

2 に答える 2

3

これは、MongoDB Perl ドライバーが DateTime と対話する方法のバグです。ISODate 値がデータベースから取得されると、ドライバーはコンストラクターを使用して DateTime オブジェクトを初期化します。from_epochただし、ナノ秒の部分はコンストラクターに渡されません。

DateTime はナノ秒を含む完全な値の受け渡しをサポートしており、これを修正するにはドライバーを更新する必要があります。

このバグのチケットを作成しました。修正します。しかし、休暇の週末が終わるまではそうではないかもしれません。:)

于 2013-07-04T19:05:20.440 に答える