Meteor.js:查找所有文档并以反向自然顺序返回

时间:2012-11-25 18:33:19

标签: meteor mongodb-query

我正在尝试返回集合中的所有文档,并在我的模板中使用{{#each}}。我的代码如下所示:

return Answers.find({}, {sort: {$natural:-1}})

但是文档按自然顺序返回(不是反向)。有谁知道为什么?我从MongoDB文档中获得了$ natural选择器,所以我看不出有什么问题。

4 个答案:

答案 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/)。

因此,如果没有编写数据的代码以及如何将其写入磁盘,我们无法测试您的假设是否无法正常工作。