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

我处于无法预测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 Values { get; set; } } 

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

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

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

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

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