在Mongoose双方保存一对多的关系

时间:2016-09-11 20:57:12

标签: node.js mongodb express mongoose

我是MongoDB的新手并使用Mongoose。

我有两个模型:usersrecipes

User

recipes: [{
    type: Schema.Types.ObjectId,
    ref: 'recipes'
}],

Recipe

_creator: {
    type: Schema.Types.ObjectId,
    ref: 'User',
    childPath: "recipes"
},

当我尝试保存食谱并将用户分配到食谱时:

var recipe = new models.Recipe({
        title: req.body.title,
        slug: req.body.slug,
        _creator: user._id
    });

    recipe.save();

配方保存得很好(即使我无法使用recipe._creator.name从配方中获取用户名)。但是,如果我尝试获取用户详细信息,recipes数组为空。我希望它充满了新创建的食谱参考。为什么不呢?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,一个创作者有很多食谱。对 ? 在这种情况下,你的创作者应该参考的食谱应该引用创作者。

如果您仔细检查食谱,那么您正在对食谱本身进行参考

{ recipes: [{
    type: Schema.Types.ObjectId,
    ref: 'recipes'
}],

}
而你应该做

{
    { recipes: [{
        type: Schema.Types.ObjectId,
        ref: 'user'
    }],
}

为什么在您的用户模型中您有对用户本身的引用?这似乎不对。

检查我在Mongodb and Express

上发布的示例

答案 1 :(得分:0)

我遇到了同样的问题,我为解决这个问题所做的是使用相应的参考更新两个文档

var recipe = new models.Recipe({
  title: req.body.title,
  slug: req.body.slug,
  _creator: user._id
});

recipe.save((err) => {
  if (err) {
    console.log(err);
  }
  user.recipes.push(recipe);
  user.save();
});