MongoDB C#驱动程序 - 如何使用Dictionary <string,string>列表插入

OnR*_*lve 9 c# serialization mongodb mongodb-.net-driver

我是mongodb + C#驱动程序的新手,所以请原谅我的任何天真.

我正在尝试对一组键值对进行批量插入,因此我的数据结构是类型的List<Dictionary<string,string>>.

这是我的持久性代码示例:

public void Persist(string collectionName, List<Dictionary<string, string>> documents)
{
  string connectionString = ConfigurationManager.ConnectionStrings[CONNECTION_STRING_KEY].ConnectionString;
  MongoServer server = MongoServer.Create(connectionString);
  MongoCredentials credentials = new MongoCredentials("MYUser", "MyPassword");
  MongoDatabase myDb = server.GetDatabase("myDb", credentials);

  var collection = myDb .GetCollection(collectionName);

  using (server.RequestStart(myDb ))
  {
    var result = collection.InsertBatch(documents);
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到有关序列化的错误:

MongoDB.Bson.BsonSerializationException:Serializer DictionarySerializer期望类型为DictionarySerializationOptions的序列化选项,而不是DocumentSerializationOptions.

我错过了设置吗?

编辑:更多信息

我的词典是我的实体.意思是,我只是将它们转储成一个,而不是创建一个保存属性的对象Dictionary.从mongo文档来看,它应该只是转换为mongo Document.

进一步编辑:扭曲问题

我可以通过将using语句更改为:来插入单个实例:

using (server.RequestStart(myDb))
  {
    foreach(var doc in documents)
      collection.Insert(new BsonDocument(doc));
    //var result = collection.InsertBatch(typeof(Dictionary<string, string>), documents);
  }
Run Code Online (Sandbox Code Playgroud)

但是,我关注的是性能,因为在真实情况下我会轻松拥有10k +词典.使用此代码,驱动程序是否足够智能批量处理这些代码?有没有办法保持InsertBatch但完成同样的事情?

当然,任何帮助都非常感谢.

Zai*_*sud 15

使用您使用的新代码,.Insert驱动程序不会批处理这些插入,您的性能将大大降低InsertBatch.

试试这个:

collection.InsertBatch(documents.Select(d => new BsonDocument(d)));
Run Code Online (Sandbox Code Playgroud)