2

我有一个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文档,Profile基于Profile2MailList该文档已经包含在某个Profile. 所以我需要

  • Profiles从集合中获取所需的配置文件
  • 更新 Profile2Maillist每个数组Profile
  • 运行更新命令我如何通过C# 2.0 MongoDb Driver. 我有MongoDb v 3.0.2。我尝试通过以下方式做到这一点:

       List<Profile> listProfiles = new List<Profile>();
                foreach (Profile item in profiles)
                {
                    item.MailLists.ToList().Add(new Profile2MailList(maillistId, item.MailLists.FirstOrDefault().Status));
                    var t = item;
                    listProfiles.Add(t);
                }
        dbCollection.UpdateManyAsync(listProfiles)
    
4

1 回答 1

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 运算符将值添加到数组中,除非该值已经存在。

于 2015-09-19T18:36:15.597 回答