2

ドキュメントのフィールド配列にいくつかの要素を挿入する必要があります。ええと...MongoにはアトミックUpdate.Pushがあることは知っています...実際には、多くのドキュメントでこの挿入を行う必要があります。ケースは次のとおりです(すべてのユーザー名にロール配列を挿入する必要があります):

 public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            foreach (string role in roleNames)
            {
                if (!this.RoleExists(role))
                {
                    throw new ProviderException(String.Format("The role '{0}' was not found.", role));
                }
            }

            //How to guarantee that all users will be updated with roles?
            foreach (string user in usernames)
            {
                var docs = this.users.Update(Query.And(Query.EQ("Username", user),
                    Query.EQ("Applications.Name", this.ApplicationName)), Update.AddToSetEach("Applications.$.Roles", 
                   new BsonArray(roleNames)));
            }
        }

ロールを 3 番目のユーザー名に「プッシュ」した瞬間に接続がダウンしたとします。以前の操作をロールバックする必要があります。何か案が?

4

1 に答える 1

2

私がMongoDBについて理解していることから、複数のコレクションに関してはACIDに準拠していません。これで、一度に1つのコレクションを更新する場合は、問題ないはずです。それ以外の場合、ACIDに準拠していない場合は、ボックスの警告ラベルの一部になります。

于 2012-12-30T03:29:35.283 に答える