按与populate的关联排序

时间:2014-04-10 18:31:30

标签: node.js sails.js waterline

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

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

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

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

还有其他方法可以继续吗?或者这是一个问题吗?

谢谢,

皮尔

3 个答案:

答案 0 :(得分:11)

你在.populate()的第二个参数中传递它:

.populate('foo', { sort: 'comments ASC' }).exec(...)

答案 1 :(得分:3)

水线(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。

答案 2 :(得分:2)

This可能会指出正确的方向:

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

您可以在where运算符here

上找到更多信息

但请注意,您现在无法轻松过滤模型的原生字段和填充字段issue on hithub