Mongo c#驱动程序UpdateBuilder AddToSet不更新现有项

本文关键字:更新 AddToSet 驱动程序 UpdateBuilder Mongo | 更新日期: 2023-09-27 17:49:45

我正在尝试使用UpdateBuilder更新BsonDocument中的数组项。AddToSet方法。但是,该方法总是在数组中插入项的新副本,而不是更新现有的项。

这是我的对象:

    public class Document
    {
       [BsonRepresentation(BsonType.ObjectId)]
       public String _id { get; set; }
       [BsonIgnoreIfNull]
       public List<Event> Events { get; set; }
    }
    public class Event
    {
       [BsonRepresentation(BsonType.ObjectId)]
       public String _id { get; set; }
       [BsonIgnoreIfNull]
       public String Title { get; set; }
    }

这里是我如何尝试更新数组项,基于它的_id:

    //tevent is an instance of an existing event, with just the Title changed
    var update = new UpdateBuilder<Document>();
    update.AddToSet<Event>(t => t.Events, tevent);
    var query = Query<Event>.EQ(t => t._id, tevent._id);
    //GetCollection() return the document collection
    var result = GetCollection().Update(query, update, UpdateFlags.Upsert);

如前所述,条目被添加到数组中,即使存在具有相同_id的条目。如果文档数组中已经存在,我想用相同的_id更新项目。

Mongo c#驱动程序UpdateBuilder AddToSet不更新现有项

您的代码将转换为:{_id: event。_id}

我认为你应该使用:var query = query . eq("事件。_id",tevent._id);

应该转换为:{Events。_id: tevent。_id}

你可以在github上找到c#驱动程序源代码:https://github.com/mongodb/mongo-csharp-driver/blob/531e7b6f1f38934811fa8eb146def5049df332d9/src/MongoDB.Driver.Legacy/Builders/UpdateBuilder.cs