【问题标题】:How to store ISO time into mongodb with timestamp being 0000000 using C#?如何使用 C# 将 ISO 时间存储到时间戳为 0000000 的 mongodb 中?
【发布时间】:2020-09-16 00:45:14
【问题描述】:

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

皮尤什库马尔

【问题讨论】:

  • 你的意思是忽略时间和偏移量? DateTime.UtcNow 有什么问题?
  • DateTime.UtcNow 正在插入时间戳,这使得相等性检查变得不可能。我能够使用大于条件进行查询,并将时间偏移为零。在进行 gor 平等检查时失败

标签: c# mongodb timestamp


【解决方案1】:

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

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")
}

【讨论】:

  • 非常感谢,就像刀子穿过黄油一样工作......我被困了这么多天:)
猜你喜欢
  • 1970-01-01
  • 2012-01-30
  • 2019-09-15
  • 2021-03-05
  • 2015-03-25
  • 2017-11-15
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
相关资源
最近更新 更多