首页 > 解决方案 > 如何使用 C# 将 ISO 时间存储到时间戳为 0000000 的 mongodb 中?

问题描述

我想使用 C# 将 DateTime 实例存储到 MongoDB 中。由于 mongodb 使用 ISO 8601 作为格式,我传递的日期与时间戳一起存储,这使得使用该日期字段进行查询成为一场噩梦。我尝试了 DateTime.Now、DateTime.UtcNow、BsonDateTime 对象,但都只使用当前时间戳保存。有没有一种方法可以让我的日期字段存储日期和休息为零,谢谢

皮尤什·库马尔

标签: c#mongodbtimestamp

解决方案


您可以使用以下代码为您的班级设置班级地图以仅存储日期时间的日期部分:

BsonClassMap.RegisterClassMap<Order>(map =>
{
    map.MapProperty(x => x.Date)
        .SetSerializer(DateTimeSerializer.DateOnlyInstance);
});

然后当执行以下

var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<Order>("orders");

await collection.InsertOneAsync(new Order
{
    Name = "MyOrder", Date = DateTime.UtcNow.Date
});

我们将在数据库中获得以下内容

> db.orders.find().pretty()
{
        "_id" : ObjectId("5ed8fb7050eb018e5ee13e73"),
        "Date" : ISODate("2020-06-04T00:00:00Z")
}

推荐阅读