Javascript 同时更新2个不同的集合

Javascript 同时更新2个不同的集合,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我有两个这样定义的模型: var OrganizationSchema = new mongoose.Schema({ users: [mongoose.Schema.Types.ObjectId] }); 及 当用户想要加入组织时,我需要同时更新组织集合和用户集合。我想知道实现这一目标的最佳方式是什么?当一个更新请求失败时,是否值得考虑这种情况?我目前正在做类似的事情(其中organization是模型组织的集合实例): 问题是:如果我的第二个更新方法失败,我最终会更新一个集合而不是

我有两个这样定义的模型:

var OrganizationSchema = new mongoose.Schema({
    users: [mongoose.Schema.Types.ObjectId]
});

当用户想要加入组织时,我需要同时更新组织集合和用户集合。我想知道实现这一目标的最佳方式是什么?当一个更新请求失败时,是否值得考虑这种情况?我目前正在做类似的事情(其中organization是模型组织的集合实例):


问题是:如果我的第二个更新方法失败,我最终会更新一个集合而不是另一个?有没有办法确保它们都已更新

首先,我会避开这个设计。我会在组织中引用或嵌入用户,反之亦然,而不是同时引用或嵌入两个用户,这样我就不会有这样的问题(每次复制数据时都会发生这种情况)

MongoDB不支持同步更新或事务。因此,您需要在代码中管理这一点


因此,是的,如果第二次更新失败,那么在编写代码时必须回滚,如果回滚失败,则必须重试,直到成功(尽管可能是指数级回滚)。请记住,这可能会与其他请求发生冲突(另一个用户试图同时保存相同的内容)。要处理这个问题,您必须为数组中的每个条目指定一个唯一项。

我有几乎相同的问题。。希望我们能得到答案。
var UserSchema = new mongoose.Schema({
    organizations: [mongoose.Schema.types.ObjectId]
});
User.findByIdAndUpdate(req.userSession.userId, { $push: { organizations: organization.id } }, function (err){
    if (err)
    {
        // server error
        console.log(err);
    }
    else
    {
        organization.users.push(req.userSession.userId);
        organization.save(function (err){
            if (err)
            {
                // server error we need to cancel 
                User.findByIdAndUpdate(req.userSession.userId, { $pull: { organizations: organization.id } }, function (err){
                    if (err)
                    {
                        // we got a problem one collection updated and not the other one !!
                        console.log(err);
                    }
                });
            }
            else
            {
                 // success
            }
        });
      }
    });