sql >> Databasteknik >  >> NoSQL >> MongoDB

Tidsprecisionsproblem vid jämförelse i mongodb-drivrutin i Go och eventuellt i andra språk och annan databas

Tider i BSON representeras som UTC millisekunder sedan Unix-epoken (spec ). Tidsvärden i Go har nanosekunders precision.

Till tur och returtid. Tidsvärden genom BSON-rangering, använd tider trunkerade till millisekunder sedan Unix-epoken:

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()), 
}

Du kan också använda Time.Truncate metod:

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

Detta tillvägagångssätt bygger på det faktum att Unix-epok och Go nolltid skiljer sig med ett helt antal millisekunder.



  1. MongoError skriv EPIPE” i Parse-Server Installation

  2. Hur man normaliserar företagsnamn

  3. Redis Vue Desktop

  4. Prestandajämförelse för att använda Redis-hashar kontra många nycklar