sql >> データベース >  >> NoSQL >> MongoDB

Goおよびおそらく他の言語や他のデータベースのmongodbドライバーでの比較に関する時間精度の問題

    BSONの時間は、Unixエポック( spec )からのUTCミリ秒として表されます。 )。 Goの時間値の精度はナノ秒です。

    トリップ時間を丸めるには、BSONマーシャリングによる時間値を使用します。Unixエポック以降、ミリ秒に切り捨てられた時間を使用します。

    func truncate(t time.Time) time.Time {
        return time.Unix(0, t.UnixNano()/1e6*1e6)
    }
    
    ...
    
    u := user{
        Username:          "test_bson_username",
        Password:          "1234",
        UserAccessibility: "normal",
        RegisterationTime: truncate(time.Now()), 
    }
    

    Time.Truncate を使用することもできます 方法:

    u := user{
        Username:          "test_bson_username",
        Password:          "1234",
        UserAccessibility: "normal",
        RegisterationTime:  time.Now().Truncate(time.Millisecond),
    }
    

    このアプローチは、UnixエポックとGoゼロ時間が整数ミリ秒異なるという事実に依存しています。



    1. マングースの自動インクリメントID

    2. Laravel5.3でMongoDBを使用する

    3. サブドキュメントを更新するためのpymongo構文

    4. DuplicateKeyExceptionをスローするMongodbアップサート