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.
Chính xác những gì tôi đang tìm kiếm! Cảm ơn bạn! – OnResolve