如何在 sails 中为多对多关联构建数据库模型

How to structure database models in sails for a many-to-many association

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

我的建议是重新考虑您的业务逻辑,如果您正在使用像 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 来绑定集合,只需使用数组在您的用户集合中使用它们。

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

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

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