【问题标题】:MongoDB and Mongoose - One to Many RelationshipsMongoDB 和 Mongoose - 一对多关系
【发布时间】:2015-10-25 01:28:48
【问题描述】:

我在理解 MongoDB 中的一对多关系选项时遇到了麻烦。我有一个相当简单的用例想要证明,但我似乎无法通过我的 Google(和 Stack Overflow)-Fu 找到任何好的分步操作。

如果我访问 mongo 的命令行工具,将一个文档插入到“users”集合中,其中包含与“roles”集合中的 _id 对应的角色 ID 字符串数组......我如何将所有这些绑定在一起猫鼬的一面?当我使用 findOne 方法时,它似乎只是按原样提取“role_id”,所以我知道我一定遗漏了一些东西。

如果我在没有任何参考的情况下将所有这些角色放入用户中,如果我需要启用或禁用角色会发生什么?我是否需要更新每个用户的每个相关角色?

非常感谢另一位新 Mongoer 的帮助和耐心!

【问题讨论】:

  • 由于 mongodb 并没有像 sql 那样真正处理“连接”,因此您必须发送两个请求才能获取该数据。一个获取用户,然后另一个获取所有这些用户的所有角色。幸运的是,当您使用 .populate 方法时,猫鼬会为您执行此操作。
  • 填充!这就是我一直想念的!我不知道它的存在。谢谢你,@KevinB

标签: node.js mongodb mongoose one-to-many


【解决方案1】:

根据您的解释,您只是忘记在查询中使用“填充”。请注意,结果将不包含链接文档,因此您需要使用“填充”来让猫鼬知道 - “嘿,我也想提取有关此角色的信息”。

例子:

//promises
User
  .findOne(<searchQuery>)
  .populate('roles')
  .exec()
  .then(function(foundUser){
      return foundUser; //do something with results (foundUser)
  })
  .onReject(function(err){
      throw err; //do something with error
});

//callbacks
User
  .findOne(<searchQuery>)
  .populate('roles')
  .exec(function(err, foundUser){
      if(err){
          throw err; //do something with error
      } else {
          //do something with results (foundUser)
      }
});

请检查以下链接:

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 2014-01-21
    • 2014-08-15
    • 2014-09-25
    • 2015-04-07
    • 2015-12-06
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多