问题
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
回答1:
You pass it in the second parameter of .populate()
like this:
.populate('foo', { sort: 'comments ASC' }).exec(...)
回答2:
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.
回答3:
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