Причина в том, что формат BSON DateTime хранит значения с меньшей точностью, чем значение .NET DateTime, поэтому при чтении его из базы данных значение усекается.
Если значение DateTime являетсяСвойство класса C #, который вы сериализуете, вы можете попросить сериализатору сериализовать значение DateTime в виде внедренного документа, содержащего как значение BSON DateTime (усеченное), так и исходное значение .NET DateTime (сохраненное в виде отметок).В этом случае значение не будет усечено при десериализации.
Например:
public class MyClass {
public ObjectId Id;
[BsonRepresentation(BsonType.Document)]
public DateTime MyDateTime;
}
Вы также можете использовать BsonRepresentation Int64 или String и не потерять точность, но затем сохраненный документ только имеет тики или строковое представление, а не BSON DateTime, что затрудняет выполнение запросов, связанных с DateTime.
Вы также должны иметь в виду, что значения DateTime хранятся в UTCв базе данных.Рекомендуется всегда использовать значения UTC для хранения и использовать только местное время при отображении их пользователю.