MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Problème de précision temporelle sur la comparaison dans le pilote mongodb en Go et éventuellement dans une autre langue et une autre base de données

Les temps dans BSON sont représentés en millisecondes UTC depuis l'époque Unix (spec ). Les valeurs de temps dans Go ont une précision de l'ordre de la nanoseconde.

Pour le temps aller-retour. Les valeurs de temps via le marshaling BSON, utilisez des temps tronqués en millisecondes depuis l'époque 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()), 
}

Vous pouvez également utiliser le Time.Truncate méthode :

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

Cette approche repose sur le fait que l'époque Unix et le temps zéro Go diffèrent d'un nombre entier de millisecondes.