I have Articles and Comments linked by a one-to-many association (an Article can have many Comments).
I would like to obtain the most commented articles so I proceed like that :
function mostCommentedArticles () {
var deferred = Q.defer();
Article.find().populate('comments').sort('comments ASC').exec(deferred.makeNodeResolver());
return deferred.promise;
}
BUT, I don't obtain the expected result : it doesn't sort at all (by Comments or anything else)
Is there an other way to proceed or is it an issue?
Thanks,
Pierre
You pass it in the second parameter of .populate()
like this:
.populate('foo', { sort: 'comments ASC' }).exec(...)
Neither waterline (0.10.22) or sailsjs (v0.11) currently support this. You would need to process your return variable to reorder the data.
There is a ticket for this at https://github.com/balderdashy/waterline/issues/334
There is a difference between
function mostCommentedArticles () {
var deferred = Q.defer();
Article.find().populate('comments').sort('comments.comment_date ASC').exec(deferred.makeNodeResolver());
return deferred.promise;
}
and
function mostCommentedArticles () {
var deferred = Q.defer();
Article.find().populate('comments', {sort: 'comment_date ASC'}).exec(deferred.makeNodeResolver());
return deferred.promise;
}
The first one should return all the articles and comments with everything sorted by the comment_date. The second one should return all your articles with the attached comments where the comments are sorted by date.
The second one should work using mongodb.
This might point you in the right direction:
.populate('foo', { where: [ '1' ]);
You can find more on the where operator here
But be aware that you for now won't be able to easily filter by both a model's native fields, and of populated fields - issue on hithub.
来源:https://stackoverflow.com/questions/22996210/sort-by-the-association-with-populate