Soy nuevo en el controlador mongodb + C# así que perdona cualquier ingenuidad en mi parte.Controlador MongoDB C# - Cómo insertar un lote utilizando una lista de diccionario <cadena, cadena>
Estoy intentando hacer una inserción por lotes en una colección de pares clave-valor y, como tal, mi estructura de datos es del tipo List<Dictionary<string,string>>
.
He aquí una muestra de mi código de persistencia:
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);
}
}
consigo un error sobre la serialización:
MongoDB.Bson.BsonSerializationException: Serializador DictionarySerializer espera opciones de serialización de DictionarySerializationOptions tipo, no se DocumentSerializationOptions.
¿Falta la configuración?
EDIT: Más información
Mis diccionarios son mis entidades. Es decir, en lugar de crear un objeto para mantener las propiedades, simplemente las vuelvo a poner en un Dictionary
. De la documentación de mongo, parece que esto debería traducirse a un mongo Document
.
hacer otras modificaciones: Giro Pregunta
que era capaz de conseguir una única instancia para insertar cambiando la instrucción using a:
using (server.RequestStart(myDb))
{
foreach(var doc in documents)
collection.Insert(new BsonDocument(doc));
//var result = collection.InsertBatch(typeof(Dictionary<string, string>), documents);
}
Sin embargo, mi preocupación es el rendimiento ya que bajo un escenario real Tendré fácilmente 10k + diccionarios. Usando este código, ¿el controlador es lo suficientemente inteligente como para procesar estos? ¿Hay alguna manera de mantener InsertBatch pero lograr lo mismo?
Por supuesto, cualquier ayuda es muy apreciada.
Exactamente lo que estaba buscando! ¡Gracias! – OnResolve