繁体   English   中英

使用c#驱动程序将Dictionary插入MongoDB

[英]Insert Dictionary into MongoDB with c# driver

我处于无法预测MongoDB文档将包含哪些字段的情况。 所以我不能再创建一个具有BsonID类型的_id字段的BsonID 我发现创建一个Dictionary(HashTable)并在我的需要中多次添加我的DateTime和String对象非常方便。

然后我尝试将生成的Dictionary对象插入MongoDb,但默认序列化失败。

这是我的类型HashTable的对象(如字典,但内部有不同的类型):

{ "_id":"",
"metadata1":"asaad",
"metadata2":[],
"metadata3":ISODate("somedatehere")}

我得到的驱动程序的错误是:

Serializer DictionarySerializer期望类型为DictionarySerializationOptions的序列化选项,而不是DocumentSerializationOptions

我用Google搜索,但找不到任何有用的东西。 我究竟做错了什么?

驱动程序需要能够找到_id字段。 您可以创建一个只有两个属性的C#类:Id和Values。

public class HashTableDocument
{
    public ObjectId Id { get; set; }
    [BsonExtraElements]
    public Dictionary<string, object> Values { get; set; }

}

请注意,我们必须使用Dictionary <string,object>而不是Hashtable。

然后,您可以使用以下代码插入文档:

var document = new HashTableDocument
{
    Id = ObjectId.GenerateNewId(),
    Values = new Dictionary<string, object>
    {
        { "metadata1", "asaad" },
        { "metadata2", new object[0] },
        { "metadata3", DateTime.UtcNow }
    }
};
collection.Insert(document);

我们可以使用MongoDB shell来确认插入的文档是否具有所需的形式:

> db.test.find().pretty()
{
        "_id" : ObjectId("518abdd4e447ad1f78f74fb1"),
        "metadata1" : "asaad",
        "metadata2" : [ ],
        "metadata3" : ISODate("2013-05-08T21:04:20.895Z")
}
>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM