Robomongo似乎没有更新文件

问题描述:

我正在使用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

您正在使用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/