【问题标题】:Robomongo doesn't seem to update documentsRobomongo 似乎没有更新文档
【发布时间】:2018-01-11 01:30:00
【问题描述】:

我正在使用 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 时,即使找到要更新的对象,该对象也没有更新。

【问题讨论】:

  • 我刚刚发现它更新了集合的第一个文档。

标签: c# mongodb robo3t


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多