sql >> Base de Datos >  >> NoSQL >> MongoDB

Problema de precisión de tiempo en la comparación en el controlador mongodb en Go y posiblemente en otro idioma y otra base de datos

Los tiempos en BSON se representan como milisegundos UTC desde la época de Unix (spec ). Los valores de tiempo en Go tienen una precisión de nanosegundos.

Para el tiempo de ida y vuelta. Los valores de tiempo a través de la ordenación de BSON, use tiempos truncados a milisegundos desde la época de 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()), 
}

También puedes usar el Time.Truncate método:

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

Este enfoque se basa en el hecho de que la época de Unix y el tiempo cero de Go difieren en un número entero de milisegundos.