2017-04-25 4 views
0

送信されたnullフィールドのみを置き換える方法。mongodbで送信されたnullフィールドのみを置き換える方法

私の製品インスタンス:

Product p1 = new Product(){ Name : "Apple", Money: 2 }; 

マイドキュメント:

{ 
    "Id" : 1 
    "Name" : "Apppple", 
    "Money" : 3, 
    "Color" : "Red" 
} 

私はこのコードをrunned:

var _filterDef = Builders<Product>.Filter.Eq(x => x.Id, 1); 
ProductCollection.ReplaceOne(_filterDef, p1); 

結果:フィールドがnullという名前のレッド...

{ 
    "Id" : 1 
    "Name" : "Apple", 
    "Money" : 2, 
    "Color" : null 
} 

私は結果たい:フィールドという名前の赤はあなたが更新しようとしているように見えます

{ 
    "Id" : 1 
    "Name" : "Apple", 
    "Money" : 2, 
    "Color" : "Red" 
} 

答えて

1

nullではありません文書を置き換えるのではなく、この場合、hereと記載されている更新操作を使用してください。 example in the documentationのように "$ set"演算子を使用する必要があります。

1

ドキュメント全体を更新プログラムとして送信するか、フィールドを選択的に更新するためにUpdateOneを使用します。ここhttps://docs.mongodb.com/getting-started/csharp/update/

+0

ありがとう

var _filterDef = Builders<Product>.Filter.Eq(x => x.Id, 1); var update = Builders<Product>.Update.Set("Name", "Apple").Set("Money", 2); ProductCollection.UpdateOne(_filterDef, update); 

より多くの例動的な方法:) –

+0

Npがあった場合、私は疑問に思いました。私はドライバを直接使用するとそうは思わない。この相互作用を取り除き、モデルをmongo db文書に直接マップするオブジェクトモデリングフレームワークがいくつかありますが、名前はありません。 – Veeram

関連する問題