MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Datetime-Probleme mit Mongo und C#

Der Grund dafür ist, dass das BSON-DateTime-Format Werte mit geringerer Genauigkeit speichert als ein .NET-DateTime-Wert, sodass der Wert beim Zurücklesen aus der Datenbank abgeschnitten wurde.

Wenn Ihr DateTime-Wert eine Eigenschaft einer C#-Klasse ist, die Sie serialisieren, können Sie den Serializer auffordern, den DateTime-Wert als eingebettetes Dokument zu serialisieren, das sowohl den BSON-DateTime-Wert (abgeschnitten) als auch den ursprünglichen .NET-DateTime-Wert (als Ticks gespeichert) enthält. In diesem Fall wird der Wert bei der Deserialisierung nicht abgeschnitten.

Zum Beispiel:

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

Sie können auch eine BsonRepresentation von Int64 oder String verwenden und die Genauigkeit nicht verlieren, aber dann das gespeicherte Dokument nur hat Ticks oder eine String-Darstellung und kein BSON DateTime, was es schwierig macht, DateTime-bezogene Abfragen durchzuführen.

Denken Sie auch daran, dass DateTime-Werte in UTC in der Datenbank gespeichert werden. Es empfiehlt sich, immer UTC-Werte für die Speicherung zu verwenden und nur lokale Zeiten zu verwenden, wenn sie dem Benutzer angezeigt werden.