gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:03:28 25 4
gpt4 key购买 nike

我有一个包含以下文档数组的 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;
}

在每个配置文件中。我需要向 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)

最佳答案

“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 运算符向数组添加一个值,除非该值已经存在。

关于MongoDb C# Driver 2.0 添加项目到嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32649188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com