c# - 保存字典对于没有 _t 的 MongoDB
问题描述
我正在尝试Dictionary<string, object>
在 MongoDB 中存储使用 c#。我在这里遵循了一些建议,但这种情况下的问题是对象可以从 aList
到 aDateTime
类型不同,并且保存在 MongoDB 中的数据如下所示。是否可以将其作为普通字段保存在数据库中,而无需来自 c#的_t
and 。_v
我觉得这很简单。任何帮助将非常感激。
测试文件:
public Dictionary<string, object> Test{ get; set; }
方法 1(保存_t
并_v
用于 c# 列表)
var filter = Builders<TestDocument>.Filter.Eq(t => t.Id, testId);
var update = Builders<TestDocument>.Update.Set(x => x.Test, test);
await collection.FindOneAndUpdateAsync(filter, update);
输出:
"test" : {
"f92095d7-0816-4d0d-a2ce-cffd9e070c86" : "Test",
"7ef82179-8762-4cee-9ebf-d1e8c961315d" : 69,
"cac45afe-c4a7-428a-9591-27fd5ceac58d" : ISODate("2021-07-06T00:00:00.021Z"),
"885a0a94-e3ac-42d8-a2c5-3b95897866f3" : {
"_t" : "System.Collections.Generic.List`1[System.Int32]",
"_v" : [
69
]
},
"0d6eb5dd-d211-4256-8eb0-9b584d2a9f7e" : {
"_t" : "System.Collections.Generic.List`1[System.String]",
"_v" : [
"Test"
]
}
}
方法 2(将 DateTime ISO 保存为字符串)
var filter = Builders<TestDocument>.Filter.Eq(t => t.Id, testId);
var bsonTest = BsonSerializer.Deserialize<BsonDocument>(test.ToJsonCamelCase())
var update = Builders<TestDocument>.Update.Set("test", bsonTest);
await collection.FindOneAndUpdateAsync(filter, update);
输出:
"test" : {
"f92095d7-0816-4d0d-a2ce-cffd9e070c86" : "Test",
"7ef82179-8762-4cee-9ebf-d1e8c961315d" : 69,
"cac45afe-c4a7-428a-9591-27fd5ceac58d" : "2021-07-06T00:00:00.021Z",
"885a0a94-e3ac-42d8-a2c5-3b95897866f3" : [
6
],
"0d6eb5dd-d211-4256-8eb0-9b584d2a9f7e" : [
"Test"
]
}