对于没有 _t 的 MongoDB,c#,mongodb"/>

首页 > 解决方案 > 保存字典对于没有 _t 的 MongoDB

问题描述

我正在尝试Dictionary<string, object>在 MongoDB 中存储使用 c#。我在这里遵循了一些建议,但这种情况下的问题是对象可以从 aList到 aDateTime类型不同,并且保存在 MongoDB 中的数据如下所示。是否可以将其作为普通字段保存在数据库中,而无需来自 c#的_tand 。_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"
    ]
}

标签: c#mongodb

解决方案


推荐阅读