Mongoose多对多补集

Mongoose多对多补集,mongoose,Mongoose,我试图使用Mongoose在用户之间建立多对多关系 有两种类型的用户:教师和学生。教师可以管理任意数量的学生。另一方面,一个学生可以对应多个教师 我创建了一个模式关系,它有两个条目,teacher和student,引用用户模式中的ObjectId var RelationSchema = new Schema({ teacher: { type: Schema.Types.ObjectId, ref: 'User' }, student: { type: Sc

我试图使用Mongoose在用户之间建立多对多关系

有两种类型的用户:教师和学生。教师可以管理任意数量的学生。另一方面,一个学生可以对应多个教师

我创建了一个模式关系,它有两个条目,teacher和student,引用用户模式中的ObjectId

var RelationSchema = new Schema({
  teacher: {
    type: Schema.Types.ObjectId,
    ref: 'User'
  },
  student: {
    type: Schema.Types.ObjectId,
    ref: 'User'
  }
});
质问一位老师负责的所有学生是微不足道的(一)

当涉及到查询其补码集时,它变得不那么明显。第一个想法是查询所有用户减去(1)中的结果

然而,上述方法可能会导致巨大的开销。
查询由一名教师负责的学生补语集的最有效方法是什么?

在用户模式中创建一个描述用户类型/角色的字段如何?可能的候选值是
{type:“student”}
{type:“teacher”}
。然后,您可以在用户查询中使用该字段来获取恭维集。我完全掌握了您所描述的用户模式。我不太明白这对获得补集有什么帮助?
User.find({}, function(err, users) {
    if (err) { /*handle and return */ }
    Relation.find({teacher: teacherId})
    .populate({path: 'student'})
    .exec(function(err, relations) {
       if (err) { /* handle and return */ }
       // map relations to students
       var students = _.map(relations, function(relation) {
           return relation.student;
       });
    });
    // Return the difference of users and students
    // i.e., complement = users - students
});