MongoDb C# 驱动程序 2.0 将项目添加到嵌套数组
MongoDb C# Driver 2.0 add item to nested array
我有一个 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)
方法 "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 运算符会向数组添加一个值。
我有一个 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)
方法 "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 运算符会向数组添加一个值。