我正在使用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);