我试图找到正在做某个主题的所有用户。这是关系:
user.js的
attributes: {
subjects: { collection: 'subject', via: 'users', dominant: true }, // Many to Many
levels: { collection: 'level', via: 'users', dominant: true } // Many to Many
}
Subject.js
attributes: {
users : { collection: 'user', via: 'subjects' } // Many to Many
}
Level.js
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的所有用户 AND 正在执行第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);
});
我正在使用风帆v0.12.3
答案 0 :(得分:1)
据我所知,没有这样的机制可以像你提到的那样进行搜索。
虽然你可以通过以下方式实现:
在populate
User.find()
.populate('subjects', {
name: 'subject-1'
})
.populate('levels', {
name: 'level-1'
})
.exec(function(err, user) {
if (err) {
// Error
}
sails.log.verbose(user);
});
使用async
async.auto({
subject: function(cb) {
Subject.findOne({
name: 'subject-1'
})
.exec(cb);
},
level: function(cb) {
Level.findOne({
name: 'level-1'
})
.exec(cb);
},
user: ['subject', 'level', function(cb, results) {
User.find({
subjects: results.subject.id,
levels: results.level.id
})
.exec(function(err, users) {
if (err) {
return cb(err);
}
sails.log.verbose(users); // Required user
});
}]
}, function(err, results) {
// Callback
});
使用.query() method,您必须编写JOIN
查询以获取数据。