MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Problemi di data e ora con Mongo e C#

Il motivo è che il formato BSON DateTime memorizza i valori con una precisione inferiore rispetto a un valore .NET DateTime, quindi quando lo rileggi dal database il valore è stato troncato.

Se il valore DateTime è una proprietà di una classe C# che stai serializzando, puoi chiedere al serializzatore di serializzare il valore DateTime come documento incorporato contenente sia il valore BSON DateTime (troncato) sia il valore DateTime .NET originale (memorizzato come Ticks). In tal caso il valore non verrà troncato quando deserializzato.

Ad esempio:

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

Puoi anche usare una BsonRepresentation di Int64 o String e non perdere la precisione, ma poi il documento archiviato solo ha Ticks o una rappresentazione di stringa e nessun BSON DateTime, il che rende difficile eseguire query relative a DateTime.

Ti consigliamo inoltre di tenere presente che i valori DateTime sono archiviati in UTC nel database. La procedura consigliata consiste nell'utilizzare sempre i valori UTC per l'archiviazione e utilizzare solo l'ora locale durante la visualizzazione all'utente.