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

Problemas de fecha y hora con Mongo y C#

El motivo es que el formato BSON DateTime almacena valores con menos precisión que un valor .NET DateTime, por lo que cuando lo vuelve a leer desde la base de datos, el valor se trunca.

Si su valor DateTime es una propiedad de una clase de C# que está serializando, puede pedirle al serializador que serialice el valor DateTime como un documento incrustado que contiene tanto el valor BSON DateTime (truncado) como el valor original .NET DateTime (almacenado como Ticks). En ese caso, el valor no se truncará cuando se deserialice.

Por ejemplo:

public class MyClass {
    public ObjectId Id;
    [BsonRepresentation(BsonType.Document)]
    public DateTime MyDateTime;
}

También puede usar una BsonRepresentation de Int64 o String y no perder precisión, pero luego el documento almacenado solo tiene Ticks o una representación de cadena y no tiene BSON DateTime, lo que dificulta realizar consultas relacionadas con DateTime.

También querrá tener en cuenta que los valores de fecha y hora se almacenan en UTC en la base de datos. La mejor práctica es usar siempre los valores UTC para el almacenamiento y solo usar las horas locales cuando se los muestra al usuario.