BsonDateTime的MongoDB更新问题

时间:2019-03-12 09:21:06

标签: c# mongodb

我正在使用C#驱动程序2.7和MongoDB 4.0.x。

我遇到的问题与日期字段有关。基本上,我知道日期存储在UTC中。 “ 16:22:37.661”是当地时间,“ 2019-03-12 08:22:37.661”是其等效的UTC。为何在两个地方显示出不同?

我的json看起来像:

{
_id: ObjectId("5c8716ac4304b7e199a4b830"),
key: "xyz",
details: [
    {...},
    {...},
    {
        v: 1,
        data: "....",
        ts: 2019-03-12 16:22:37.661
    }
],
create_ts: 2019-03-12 02:16:57.256,
details_ts: 2019-03-12 08:22:37.661

}

从客户端提交的json仅包含密钥和一个或多个元素。服务器端将其向上插入,并将新的详细信息推入(累积)到阵列中。在推送之前,将时间戳添加到detail数组的每个元素,然后设置details_ts的最新ts。问题是details的最后一个元素中的ts与details_ts看起来不同。这对我来说没有意义,因为我仅创建了一个BsonDateTime并使用了很多地方。无论在什么时区,它们的外观都应该完全相同。

我的C#代码如下:

DateTimeOffset dt = DateTimeOffset.Now;
BsonDateTime bdt = new BsonDateTime(dt.UtcDateTime);

//creating filter
......

var update_builder = Builders<BsonDocument>.Update;
var update_list = new List<UpdateDefinition<BsonDocument>>();
update_list.Add(update_builder.SetOnInsert("create_ts", bdt));

var details = doc["details"].AsBsonArray;
foreach (BsonDocument d in details) {
    d.Set("ts", bdt);
}
update_list.Add(update_builder.Set("detail_ts", bdt));
update_list.Add(update_builder.PushEach("Details", details));

var updater = update_list.Count > 0 ? update_builder.Combine(update_list.ToList()) : update_builder.Combine();
var options = new UpdateOptions { IsUpsert = true };

var r = await collection.WithWriteConcern(wc).UpdateOneAsync(filter, updater, options);

0 个答案:

没有答案