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)
| 归档时间: |
|
| 查看次数: |
9349 次 |
| 最近记录: |