MongoDb C#Driver 2.0将项添加到嵌套数组

时间:2015-09-18 09:58:23

标签: mongodb mongodb-.net-driver mongodb-csharp-2.0

我有一个Profiles文档集合,其中包含以下文档数组:

public class Profile2MailList
{


    [BsonElement(elementName: "listId")]
    [BsonRequired]
    public int MailListId;

    [BsonElement(elementName: "status")]
    [BsonRequired]
    public int Status;

    [BsonElement(elementName: "subscriptionDate")]
    [BsonRequired]
    public DateTime SubscriptionDate;
} 
每个Profile中的

。 我需要在Profile2MailList数组中添加基于Profile2MailList的{​​{1}}个新文档,该文档已包含在某个Profile中。所以我需要

  • Profile2MailList集合
  • 获取所需的个人资料
  • 更新 每个Profile
  • 中都有Profiles个数组
  • 运行更新命令 我如何通过Profile2Maillist执行该操作。我有Profile。 我尝试通过以下方式制作它:

    C# 2.0 MongoDb Driver

1 个答案:

答案 0 :(得分:3)

方法“UpdateManyAsync”仅在您要执行一种类型的更新时才有效,这似乎不是您的情况。您要做的是执行批量更新。根据您的示例,您可能希望执行以下操作:

        var bulk = new List<WriteModel<Profile>>();
        foreach (Profile item in profiles)
        {
            var newProfile = new Profile2MailList(maillistId, item.MailLists.FirstOrDefault().Status);
            var filter = Builders<Profile>.Filter.Eq(g => g.Id, item.Id);
            var update = Builders<Profile>.Update.AddToSet(item.MailLists, newProfile);
            var updatemodel = new UpdateOneModel<Profile>(filter, update);

            bulk.Add(updatemodel);  
        }
        await profileCollection.BulkWriteAsync(bulk);

AddToSet运算符向数组添加值,除非该值已存在。