2016-11-07 7 views
0

私はc#とmongodbを初めて使用しています。私のAPIの更新方法を解決できません。私はこのチュートリアルhereに従っています。私が行くように私は私は現在、このように見えるように私は私のコードでそれを更新した。この部分C#Mongodb CRUDオペレータ更新方法

public void Update(ObjectId id,Product p) 
    { 
     p.Id = id; 
     var res = Query<Product>.EQ(pd => pd.Id,id); 
     var operation = Update<Product>.Replace(p); 
     _db.GetCollection<Product>("Products").Update(res,operation); 
    } 

に貼り付けています、その上廃止を修正しようとしています。

public void Update(ObjectId id, Product p) 
    { 
     p.ProductId = id; 
     var res = Builders<Product>.Filter.Eq(pd => pd.ProductId, id); 
     var operation = Builders<Product>.Update(p); 
     _db.GetCollection<Product>("Product").UpdateOne(res, operation); 
    } 

私の問題は、このように更新方法を構築するための正しい方法は何です...私は方法として私たちにそれをカント.updateにありますか?すべての助けを事前に感謝します。あなたは間違って

Builders<Product>.Update 

ビルダーを使用している

答えて

0

が方法ではありません、それはあなたが使用することができ、更新操作の数を公開し、すなわちセット、AddToSetなど

あなたが達成しようとしているかによっては、次のようにあなたはこれを使用することができ、個々のフィールドを更新したい場合は、それを使用します。

var operation = Builders<Product>.Update.Set(u => u.SomeField, "SomeValue"); 

をそして、あなたはすなわち、それらを一緒に連鎖することができます

var operation = Builders<Product> 
    .Update 
     .Set(u => u.SomeField, "SomeValue") 
     .Set(u => u.SomeOtherField, "SomeOtherValue"); 

だから、(あなたが特定の製品のIDをフィルタリングし、その非常に同じフィールドを更新しているように見えます)あなたのコードを使用して

public void Update(ObjectId id, Product p) 
{ 
    var res = Builders<Product>.Filter.Eq(pd => pd.ProductId, id); 
    var operation = Builders<Product>.Update.Set(u => u.ProductId, id); 
    _db.GetCollection<Product>("Product").UpdateOne(res, operation); 
} 
あなたは完全に文書を交換したかったかのように

、 Update

の代わりにReplaceOne()を使用することがあります
関連する問題