当您使用.aggregate本身,.lookup或.match等聚合方法时,查询助手无法正常工作。与.where,.find,.limit等常规方法相反。
例如,这有效:
Model.aggregate().match(...).lookup(...).exec(function(err, item) { .. };
但这不是..
userSchema.query.findUser = function(id) {
return this.match({'_id': id});
}
userSchema.query.getPosts = function(id) {
return this.lookup({'from': 'posts', 'localField': 'posts', 'foreignField': '_id', 'as': 'intents' });
}
....
User.aggregate().findUser(id).getPosts().exec(function(err, item) { ... };
这行不行吗?还是有其他方法可以使用聚合方法来执行查询助手。我知道我可以在这种情况下使用.populate,但是我只是为了演示目的编写了一个简单的聚合。我在应用程序中做了一些更复杂的事情,使用这样的方法会很有用。