2017-08-03 143 views
0

我正在使用C#和MongoDB編寫一個Web應用程序。爲了更新文檔我已經寫了代碼看起來像這樣:Robomongo似乎沒有更新文件

public MyType Update(MyType obj) { 
    ... 
    var oFilter = Builders<MyType>.Filter.Eq(o => o.MyId, obj.MyId); 
    var oResult = oCollection.FindOneAndReplace(oFilter, obj); 
    if(oResult!=null) 
     Console.Writeline("object to update found"); 
    ... 
    return oResult; 
} 

類的MyType看起來像這樣

[DataContract] 
public class MyType 
{ 
    [DataMember(Name="_id")] 
    [BsonId(IdGenerator = typeof(CombGuidGenerator))] 
    public Guid MyId { get; set; } 
    ... 
} 

的代碼基本上obj的_id與每個文檔的_id比較該集合,並且如果它發現匹配,它將執行更新。該程序似乎運行順利,但是當我檢查Robomongno時,即使找到要更新的對象,對象也不會更新。

+0

我剛剛發現它更新了集合的第一個文檔。 – nix86

回答

0

您正在使用FindOneAndReplace,MongoDB表示「查找單個文檔並以原子方式替換」,這就是您更新第一個文檔的原因。你可能需要的是和UpdateMany()所以也許

public MyType Update(MyType obj) { 
     ... 
     var oFilter = Builders<MyType>.Filter.Eq(o => o.MyId, obj.MyId); 
     var oResult = oCollection.UpdateMany(
           { o.MyId: obj.MyId }, 
           { $set: { "MyFieldName" : MyValue} } 

              ); 
     if(oResult!=null) 
      Console.Writeline("object to update found"); 
     ... 
     return oResult; 
    } 

,但我不知道如何使用UpdateMany()方法。 結賬https://docs.mongodb.com/v3.2/reference/method/db.collection.updateMany/