2012-08-22 9 views
9

मैं 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); 
    } 
} 

मैं क्रमबद्धता के बारे में त्रुटि:

MongoDB.Bson.BsonSerializationException: Serializer DictionarySerializer प्रकार DictionarySerializationOptions की क्रमबद्धता विकल्पों की उम्मीद, नहीं DocumentSerializationOptions।

क्या मुझे सेटिंग्स याद आ रही है?

संपादित करें: अधिक जानकारी

मेरे शब्दकोशों मेरी संस्थाओं कर रहे हैं। मतलब, संपत्तियों को पकड़ने के लिए किसी ऑब्जेक्ट को बनाने के बजाय, मैं उन्हें Dictionary में डंप करता हूं। मोंगो दस्तावेज से, ऐसा प्रतीत होता है क्योंकि इसे सिर्फ एक मोंगो Document में अनुवाद करना चाहिए।

को और संपादित: ट्विस्ट प्रश्न

मैं करने के लिए कथन का उपयोग बदलकर डालने के लिए एक उदाहरण प्राप्त करने में सक्षम था:

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

लेकिन, मेरा चिंता कोई वास्तविक परिदृश्य के अंतर्गत के बाद से प्रदर्शन है मैं आसानी से 10k + शब्दकोश होगा। इस कोड का उपयोग करना, चालक इन बैच करने के लिए पर्याप्त स्मार्ट है? क्या InsertBatch रखने का कोई तरीका है लेकिन एक ही चीज़ को पूरा करना है?

बेशक, किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

15

अपने नए कोड .Insert, ड्राइवर नहीं बैच इन आवेषण होगा का उपयोग करता है का उपयोग करना है और आप एक InsertBatch से काफी धीमे प्रदर्शन के मिल जाएगा। मैं वास्तव में क्या देख रहा था

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

:

इस बजाय कोशिश करो! धन्यवाद! – OnResolve

संबंधित मुद्दे