Javascript 多对多关系包含

Javascript 多对多关系包含,javascript,node.js,orm,sails.js,waterline,Javascript,Node.js,Orm,Sails.js,Waterline,我试图找到所有正在做某个主题的用户。以下是关系: User.js attributes: { subjects: { collection: 'subject', via: 'users', dominant: true }, // Many to Many levels: { collection: 'level', via: 'users', dominant: true } // Many to Many } attributes: { users : { col

我试图找到所有正在做某个主题的用户。以下是关系:

User.js

attributes: {
    subjects: { collection: 'subject', via: 'users', dominant: true }, // Many to Many
    levels: { collection: 'level', via: 'users', dominant: true } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'subjects' } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'levels' } // Many to Many
}
Subject.js

attributes: {
    subjects: { collection: 'subject', via: 'users', dominant: true }, // Many to Many
    levels: { collection: 'level', via: 'users', dominant: true } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'subjects' } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'levels' } // Many to Many
}
Level.js

attributes: {
    subjects: { collection: 'subject', via: 'users', dominant: true }, // Many to Many
    levels: { collection: 'level', via: 'users', dominant: true } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'subjects' } // Many to Many
}
attributes: {
    users : { collection: 'user', via: 'levels' } // Many to Many
}
我希望能够在用户上进行查找,并且只返回与特定主题有关系的用户。大概是这样的:

User.find({ subjects: { 'contains': 1 } })
  .exec(function(err, results){
      if(err) return res.serverError(err);
      users = results;

      return res.json(users);
  });
我知道我可以这样做:

Subject.findOne({id:1})
  .populate('users')
  .exec(function(err, results){
      if(err) return res.serverError(err);
      users = results.users;

      return res.json(users);
  });
然而,我不想这样做,因为我可能想过滤的不仅仅是主题。例如,使用上述内容,我可能希望找到所有正在进行主题1和级别2的用户

User.find({ subjects: { 'contains': 1 }, levels: { 'contains': 2 } })
  .exec(function(err, results){
      if(err) return res.serverError(err);
      users = results;

      return res.json(users);
  });

我使用的是sails v0.12.3

据我所知,没有这样的机制,您可以在哪里搜索您提到的内容

尽管您可以通过以下方式完成:

  • 填充中使用条件

     User.find()
      .populate('subjects', {
        name: 'subject-1'
      })
      .populate('levels', {
        name: 'level-1'
      })
      .exec(function(err, user) {
        if (err) {
          // Error
        }
        sails.log.verbose(user);
      });
    
  • 使用

  • 使用where,您必须编写一个
    JOIN
    查询来获取数据


  • 示例1没有做我希望它做的事情,它查找所有用户,然后过滤每个用户的主题和级别。它不会返回附加到所选主题/级别的所有用户。第二个例子看起来和第一个一样,因此仍然没有做我们需要它做的事情。我们可以使用.query()来实现但是我不想使用本机查询。我不确定第一个,但第二个应该可以正常工作。我需要一个传入级别和传入主题的用户列表,而不是像您的代码所提供的那样只有一个用户。我编辑了代码,为您提供了一个主题名为subject-1、级别为level-1的用户列表。I我已经试过你的代码了。这并没有返回我所需要的。“users”变量返回undefined,“results”变量返回指定的级别和主题,但不返回用户。