2012-10-12 17 views
5

मैं MongoDB सी # ड्राइवर के साथ कुछ अद्यतन विवरण बना रहा हूँ। The C# API में Builder नामस्थान में लपेटा गया और "अन-लपेटा" दोनों विधियां शामिल हैं।मोंगोडीबी सी # चालक का उपयोग करना: लपेटा या अन-लपेटा?

सतह पर, ऐसा लगता है कि ये जेनेरिक द्वारा भिन्न हैं और BSON रैपर का उपयोग नहीं कर रहे हैं। हालांकि, दोनों विधि प्रकार मुझे गैर-बोसन-लपेटा पैरामीटर में पास करने की अनुमति देते हैं। क्या दोनों के बीच एक कार्यात्मक अंतर है?

var myCollection = database.GetCollection<MyObject>(typeof(MyObject).Name); 

myCollection.Update(
    Query.EQ("_id", myId), 
    Update.Set("Message", "My message text")); 

// And now the same call with "Wrapped" method 
myCollection.Update(
    Query.EQ("_id", myId), 
    Update.SetWrapped("Message", "My message text")); 

इन दो कॉल के बीच क्या अंतर है:

उदाहरण (चालक v1.2 का उपयोग), यहाँ Update.Set के दो उपयोग हैं के लिए

? अगर केवल सिंटैक्टिक चीनी - एक लपेटा संस्करण की आवश्यकता क्यों है?

उत्तर

5

कोई स्ट्रिंग मान सेट करते समय कोई अंतर नहीं है। जटिल प्रकारों के साथ काम करते समय लपेटे गए तरीकों की आवश्यकता होती है: कक्षाएं, सूचियां, आदि (जो BsonValue नहीं है)। वे ऑब्जेक्ट्स को बस BsonValue प्रकार में सही रूप से परिवर्तित करते हैं।

छोटे उदाहरण:

सेट आप निम्न कर नहीं कर सकते हैं:

var item = new MyDemo(); 
Update.SetWrapped("Item", item) 

यह है कि:

var item = new MyDemo(); 
Update.Set("Item", item) 

आप लिपटा विधि या ToBsonDocument() विस्तार उपयोग करने के लिए है!

एक नोट, चालक और मोंगोड के आसपास के अधिकांश टुकड़े खुले स्रोत हैं। तो यह look at के लिए एक बड़ा सौदा नहीं है :)

+0

ओपन सोर्स रिमाइंडर के लिए +1। मैं हमेशा इसके बारे में भूल जाता हूँ। – SethO

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