【问题标题】:How to perform "all or nothing" operation with mongoDB?如何使用 mongoDB 执行“全有或全无”操作?
【发布时间】:2012-12-14 19:15:40
【问题描述】:

我需要在文档的字段数组中插入一些元素。嗯……我知道 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)));
            }
        }

假设在将角色“推送”到第三个用户名时连接断开。我需要回滚以前的操作。任何想法?

【问题讨论】:

    标签: c# mongodb transactions push insertion


    【解决方案1】:

    根据我对 MongoDB 的了解,它在多个集合方面不符合 ACID。现在,如果你一次更新一个集合,你应该很好。否则,如果您愿意,非 ACID 合规性是包装盒上警告标签的一部分。

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2016-03-25
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多