2012-08-22 23 views
9

Tôi mới đến trình điều khiển mongodb + C# để tha thứ cho sự ngây thơ của tôi.Trình điều khiển MongoDB C# - Cách InsertBatch sử dụng Danh sách Từ điển <string, string>

Tôi đang cố thực hiện chèn hàng loạt trên tập hợp các cặp khóa-giá trị và vì vậy cấu trúc dữ liệu của tôi thuộc loại List<Dictionary<string,string>>.

Đây là một mẫu mã kiên trì của tôi:

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); 
    } 
} 

tôi nhận được một lỗi về serialization:

MongoDB.Bson.BsonSerializationException: Serializer DictionarySerializer dự kiến ​​tùy chọn serialization của DictionarySerializationOptions loại, không DocumentSerializationOptions.

Tôi có thiếu cài đặt không?

EDIT: Thông tin

từ điển của tôi là các đơn vị của tôi. Có nghĩa là, thay vì tạo một đối tượng để giữ các thuộc tính, tôi chỉ đổ chúng vào một Dictionary. Từ tài liệu mongo, nó xuất hiện như thế này chỉ nên dịch sang một mongo Document.

THÊM EDIT: Twist Câu hỏi

tôi đã có thể để có được một trường hợp duy nhất để chèn bằng cách thay đổi tuyên bố sử dụng để:

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

Tuy nhiên, mối quan tâm của tôi là thực hiện kể từ khi theo một kịch bản thực Tôi sẽ dễ dàng có từ điển 10k +. Sử dụng mã này, trình điều khiển có đủ thông minh để thực hiện việc này không? là có một cách để giữ InsertBatch nhưng thực hiện điều tương tự?

Tất nhiên, mọi trợ giúp đều được đánh giá cao.

Trả lời

15

Sử dụng mã mới của bạn có sử dụng .Insert, người lái xe sẽ không hàng loạt những chèn và bạn sẽ có được hiệu suất đáng kể chậm hơn so với một InsertBatch.

Hãy thử điều này thay vì:

collection.InsertBatch(documents.Select(d => new BsonDocument(d))); 
+1

Chính xác những gì tôi đang tìm kiếm! Cảm ơn bạn! – OnResolve

Các vấn đề liên quan