【问题标题】:How to structure database models in sails for a many-to-many association如何在 Sails 中为多对多关联构建数据库模型
【发布时间】:2015-08-22 20:11:18
【问题描述】:

我正在创建一个由团队和用户组成的网络应用。用户可以属于多个团队,并且团队由许多用户组成。为了在后端实现这一点,我按照 this one 之类的 Waterline 指南创建关联表,并为用户和团队创建了水线模型。完成此操作后,我仍然不确定我的 api 如何返回,例如,属于某个团队的用户列表。 我不确定这里的最佳做法是什么。我是否应该在团队模型中创建一个仅存储团队用户名称的数组,并在需要时返回它?或者有没有一种高效的方法来查询关联表来获取特定团队的用户列表? 任何帮助将不胜感激!

【问题讨论】:

  • 您链接到的 Waterline 指南包含所有答案 - 只需将“团队”替换为“宠物”,它就会完全为您建模。您使用populate 获取与用户关联的所有团队,或与团队关联的所有用户。

标签: javascript mongodb sails.js database-schema waterline


【解决方案1】:

blueprints 用于您的api,您将自动检索团队的用户。

如果你想使用自定义控制器,你可以使用populate()获得相同的结果。

Team.findOne({id:id}).populate('users').exec(function(err, team){
  console.log(team.toJSON())
});

【讨论】:

    【解决方案2】:

    我的建议是重新考虑你的业务逻辑,如果你使用像 mongo 这样的数据库,像对象一样规划你的模型,你猜你的主要项目是用户喜欢:

    var UserModel = {
      name: String,
      age: Number,
      teams:[
        {
          name: String,
          memberSince: Date
        },
        {
          name: String,
          memberSince: Date
        }
      ]
    };

    然后检索某个团队的用户列表,查询看起来像

    var memberList = UserModel.find({teams.name:<your team>});
    

    不要使用任何 id 来绑定集合,只需使用数组在您的用户集合中使用它们。

    【讨论】:

    • 很遗憾,我需要团队模型来存储有关各个团队的信息,所以我不确定您的建议是否可行。
    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多