我正在尝试返回集合中的所有文档,并在我的模板中使用{{#each}}。我的代码如下所示:
return Answers.find({}, {sort: {$natural:-1}})
但是文档按自然顺序返回(不是反向)。有谁知道为什么?我从MongoDB文档中获得了$ natural选择器,所以我看不出有什么问题。
答案 0 :(得分:3)
不能告诉它为什么不以相反的顺序返回。
但您可以在模板助手方法中创建一个数组,并使用array.sort()
或array.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;
答案 1 :(得分:1)
排序不是参数,而是在生成的 Cursor 对象上 find()之后调用的单独函数。这是MongoDB文档引用的方法,适用于MongoJS等驱动程序:
return Answers.find().sort({$natural: -1});
Meteor似乎没有将 sort()函数添加到 Cursor 的实现中,因此另一种解决方案是按 _id <排序/ strong>基于日期生成的字段(以及插入顺序):
return Answers.find({}, {sort: {'_id': -1}});
答案 2 :(得分:1)
作为一种解决方法,您可以这样做:
return Answers.find().fetch().reverse();
我知道通过sort参数做得更好,但我认为现在不可能。
答案 3 :(得分:0)
我认为你可能会在这里混淆'自然秩序'的定义。一方面,字母/字符串(A,B,C ...)和数字(1,2,3 ...)的自然排序顺序。
但是在mongo的情况下,'natural'指的是数据写入磁盘的顺序。 '{$ natural:1}'按照它们存在于磁盘上的顺序返回'文档...',所以'{$ natural:-1}'将其反转(http://docs.mongodb.org/manual/reference/operator/meta/natural/)。
因此,如果没有编写数据的代码以及如何将其写入磁盘,我们无法测试您的假设是否无法正常工作。