2012-03-29 9 views
5

मोंगोडीबी का उपयोग करके शून्य मूल्य को अपडेट नहीं कर रहा है, मुझे सरणी शून्य होने पर एरे में तत्व जोड़ने में परेशानी हो रही है। यदि मैं कंसोल से आइटम जोड़ता हूं तो AddToSet अपेक्षा के अनुसार काम करता है। मैं 10gen से आधिकारिक सी # ड्राइवर का उपयोग कर रहा हूँ।AddToSet के साथ अद्यतन मोंगोडीबी सी #

var query = Query.EQ("_id", objectId);   
var itemDoc = item.ToBsonDocument(); 

//items is an array but currently null 
var update = MongoDB.Driver.Builders.Update.AddToSet("items", itemDoc); // YUNoWork? 

//somefield doesn't exist 
var workingUpdate = MongoDB.Driver.Builders.Update.AddToSet("somefield", itemDoc); //works fine 

var collection = DataBase.GetCollection<MyObject>(CollectionName); 

collection.Update(query, update); // doesn't work 
collection.Update(query, workingUpdate); // works 

क्या यह अपेक्षित व्यवहार है? यदि हां, तो क्या सरणी में आइटम जोड़ने का एक और सामान्य तरीका है?

उत्तर

10

कुछ खुदाई, according to some other comments - जैसा कि आप कहते हैं, यदि तत्व मौजूद नहीं है, तो यह काम करता है, लेकिन अगर यह शून्य है - यह काम नहीं करता है। जाहिर है यह डिजाइन द्वारा है।

एक सुझाव BsonIgnoreIfNull एरे में विशेषता जोड़ने के लिए था, जिसका अर्थ यह होगा कि आपका AddToSet तब काम करेगा।

+0

सूचियों के लिए BsonIgnoreIfNull का उपयोग सी # कक्षा परिभाषाओं और मोंगोडीबी के बीच प्रतिबाधा विसंगति को हल करता है। धन्यवाद! – HatAndBeard

+1

किसी और के लिए यह स्पष्ट करने के लिए कि यह उत्तर कौन देखता है, आपको इसके लिए अपने मौजूदा डेटा को काम करने के लिए साफ करना होगा। दूसरे शब्दों में, यदि आपके पास पहले से एक शून्य संपत्ति वाला दस्तावेज़ है, तो आपको संपत्ति या दस्तावेज़ को हटाना होगा। _Then_ अगली बार जब आप AddToSet का उपयोग करेंगे तो यह काम करेगा। मैंने विशेषता जोड़ दी थी, लेकिन यह अभी भी काम नहीं कर सका क्योंकि डेटा पहले ही शून्य से बचाया गया था। – adam0101

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