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ドキュメントを追加する必要があります。だから私はする必要がありますProfileProfile2MailListProfile

  • 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」は、1 つのタイプの更新を実行する場合にのみ機能しますが、これはあなたのケースではないようです。やりたいことは、代わりに一括更新を実行することです。あなたの例に基づいて、次のようなことをしたいと思うでしょう:

        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 に答える