我正在尝试返回集合中的所有文档,以便在我的模板中将其与 {{#each}} 一起使用。我的代码如下所示:
return Answers.find({}, {sort: {$natural:-1}})
但是文档以自然顺序返回(而不是反向)。有谁知道为什么?我从 MongoDB 文档中得到了 $natural 选择器,所以我看不出有什么问题。
我正在尝试返回集合中的所有文档,以便在我的模板中将其与 {{#each}} 一起使用。我的代码如下所示:
return Answers.find({}, {sort: {$natural:-1}})
但是文档以自然顺序返回(而不是反向)。有谁知道为什么?我从 MongoDB 文档中得到了 $natural 选择器,所以我看不出有什么问题。
不知道为什么它不以相反的顺序返回。
但是您可以在模板辅助方法中创建一个数组,并使用array.sort()
orarray.reverse()
函数返回一个数组的反转。
例如:假设您的Answers
收藏看起来像这样:
Answers({ansNo: 1, ansBody: "body1"},
{ansNo: 2, ansBody: "body2"},
{ansNo: 3, ansBody: "body3"});
并且要返回的数组是:
var AnswersArr = new Array();
然后在您的模板助手中:->
var tempCollection = Answers.find({});
tempCollection.forEach(function(data){
var obj = {ansNo: data.asnNo, ansBody: data.ansBody};
AnswersArr.push(abj);
});
AnswersArr.sort(function(a, b){return b.ansNo - a.ansNo;}); //sort in reverse order
return AnswersArr;
Sort不是参数,而是在结果Cursor对象上的find()之后调用的单独函数。这是 MongoDB 文档所引用的方法,可与 MongoJS 等驱动程序一起使用:
return Answers.find().sort({$natural: -1});
似乎 Meteor 没有将sort()函数添加到他们的Cursor实现中,因此另一种解决方案是按基于日期(以及因此插入顺序)生成的_id字段进行排序:
return Answers.find({}, {sort: {'_id': -1}});
作为一种解决方法,您可以这样做:
return Answers.find().fetch().reverse();
我知道通过 sort 参数来做会更好,但我认为现在不可能。
我认为您可能会在这里混淆“自然秩序”的定义。一方面,字母/字符串(A、B、C ...)和数字(1、2、3 ...)有自然的排序顺序。
但在 mongo 的情况下,“自然”是指数据写入磁盘的顺序。'{$natural:1}' 返回'文档按照它们在磁盘上存在的顺序......',所以'{$natural:-1}' 反转(http://docs.mongodb.org/manual/reference /操作员/元/自然/)。
因此,如果没有写入数据的代码以及对数据如何写入磁盘的一些了解,我们就无法检验您的假设,即它不能正常工作。