无法保存推送到阵列的对象

时间:2015-04-07 11:45:08

标签: node.js mongoose

嗨,我和mongoose有一个奇怪的问题。

Group.findById(req.params.group_id, function(err, group){
        User.findOne(req.body, function(err, user){
            group.users.push(user);
            user.groups.push(group);
            group.save();
            user.save();
            res.json({group: group, user: user});
            return true;    
        });
    });

我尝试在用户和组之间创建双向关系。用户被正确推送到group.users数组并完美保存。当我尝试在user.groups数组中保存组时,会出现此问题。 mongo方面没有任何动作,直到我再次尝试再次执行此操作。现在旧元素已正确保存,新元素仍未保存。在快速方面,一切似乎都很好,返回到前端的对象也是有效的。

在这里,您可以看到我的问题

> Group    User     group.users in database  user.groups in database
> group1   user1       [user1]                   []       
> group2   user2      [user1, user2]            [group1]
> group3   user3    [user1, user2, user3]     [group1, group2]

我希望你明白这个问题的关键在哪里。

您对如何解决该问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

这是由于save的异步操作,所以你需要像这样嵌套它们(假设你使用refs作为数组子文档):

Group.findById(req.params.group_id, function(err, group){
  User.findOne(req.body, function(err, user){
    group.users.push(user);
    group.save(function (err, group) {
      user.groups.push(group);
      user.save(function (err, group) {
        res.json({group: group, user: user});
      });
    });
  });
});

我还会考虑使用像async之类的库来加快这个过程,因为查找组和用户的两个查询并不相互依赖。