2012-03-29 4 views
5

MongoDBを使用して、配列がnullのときにen要素を配列に追加する際に問題があります。 AddToSetは、コンソールからアイテムを追加すると、正常に機能します。私は10genの公式のC#ドライバを使用しています。MongoDBでnull値を更新していないAddToSetでの更新C#

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 - あなたが言うように、要素が存在しない場合は動作しますが、それが無効であれば動作しません。どうやらこれは設計によるものです。

1つの提案は、配列にBsonIgnoreIfNull属性を追加することでした。これは、AddToSetが機能することを意味します。

+0

リストにBsonIgnoreIfNullを使用すると、C#クラス定義とMongoDB間のインピーダンスの不一致が解決されます。ありがとう! – HatAndBeard

+1

この回答を見る他の誰かを明確にするには、これが機能するために既存のデータを整理する必要があります。言い換えれば、ヌルプロパティを持つドキュメントがすでにある場合は、そのプロパティまたはドキュメントを削除する必要があります。 _これで、次回AddToSetを使用したときに動作します。私はその属性を追加しましたが、データが既にnullで保存されていたので、それでも機能しませんでした。 – adam0101

関連する問題