我正在使用C#和MongoDB编写Web应用程序。为了更新文档,我编写了一个代码如下:
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 :(得分: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/