MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Problema de precisão de tempo na comparação no driver mongodb em Go e possivelmente em outro idioma e outro banco de dados


Os tempos em BSON são representados como milissegundos UTC desde a época do Unix (spec ). Os valores de tempo em Go têm precisão de nanossegundos.

Para tempo de ida e volta. Valores de tempo por meio do empacotamento BSON, use tempos truncados em milissegundos desde a época do 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()), 
}

Você também pode usar o Time.Truncate método:
u := user{
    Username:          "test_bson_username",
    Password:          "1234",
    UserAccessibility: "normal",
    RegisterationTime:  time.Now().Truncate(time.Millisecond),
}

Essa abordagem se baseia no fato de que a época do Unix e o Go zero time diferem por um número inteiro de milissegundos.