4

我有通过一对多关联链接的文章和评论(一篇文章可以有很多评论)。

我想获得评论最多的文章,所以我这样做:

function mostCommentedArticles () {
  var deferred = Q.defer();
  Article.find().populate('comments').sort('comments ASC').exec(deferred.makeNodeResolver());
  return deferred.promise;
}

但是,我没有得到预期的结果:它根本没有排序(通过评论或其他任何东西)

有没有其他方法可以继续,还是有问题?

谢谢,

皮埃尔

4

3 回答 3

11

您将它传递给第二个参数,.populate()如下所示:

.populate('foo', { sort: 'comments ASC' }).exec(...)
于 2014-10-30T15:19:13.937 回答
3

waterline (0.10.22) 或sailsjs (v0.11) 目前都不支持这一点。您需要处理返回变量以重新排序数据。

https://github.com/balderdashy/waterline/issues/334有一张票

之间有区别

 function mostCommentedArticles () {
  var deferred = Q.defer();
  Article.find().populate('comments').sort('comments.comment_date ASC').exec(deferred.makeNodeResolver());
  return deferred.promise;
 }

function mostCommentedArticles () {
  var deferred = Q.defer();
  Article.find().populate('comments', {sort: 'comment_date ASC'}).exec(deferred.makeNodeResolver());
  return deferred.promise;
 }

第一个应该返回所有按comment_date 排序的文章和评论。第二个应该返回您的所有文章以及附加的评论,其中评论按日期排序。

第二个应该使用 mongodb 工作。

于 2015-05-22T07:49:29.617 回答
2

可能会为您指明正确的方向:

.populate('foo', { where: [ '1' ]);

您可以在此处找到有关 where 运算符的更多信息

但请注意,您现在无法轻松地通过模型的本机字段和填充字段进行过滤 - hithub 上的问题。

于 2014-04-11T08:20:07.310 回答