8

我正在尝试返回集合中的所有文档,以便在我的模板中将其与 {{#each}} 一起使用。我的代码如下所示:

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

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

4

4 回答 4

3

不知道为什么它不以相反的顺序返回。

但是您可以在模板辅助方法中创建一个数组,并使用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;
于 2012-11-26T10:01:20.350 回答
1

Sort不是参数,而是在结果Cursor对象上的find()之后调用的单独函数。这是 MongoDB 文档所引用的方法,可与 MongoJS 等驱动程序一起使用:

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

似乎 Meteor 没有将sort()函数添加到他们的Cursor实现中,因此另一种解决方案是按基于日期(以及因此插入顺序)生成的_id字段进行排序:

return Answers.find({}, {sort: {'_id': -1}});
于 2013-02-27T23:49:12.027 回答
1

作为一种解决方法,您可以这样做:

return Answers.find().fetch().reverse();

我知道通过 sort 参数来做会更好,但我认为现在不可能。

于 2014-12-13T23:23:38.700 回答
0

我认为您可能会在这里混淆“自然秩序”的定义。一方面,字母/字符串(A、B、C ...)和数字(1、2、3 ...)有自然的排序顺序。

但在 mongo 的情况下,“自然”是指数据写入磁盘的顺序。'{$natural:1}' 返回'文档按照它们在磁盘上存在的顺序......',所以'{$natural:-1}' 反转(http://docs.mongodb.org/manual/reference /操作员/元/自然/)。

因此,如果没有写入数据的代码以及对数据如何写入磁盘的一些了解,我们就无法检验您的假设,即它不能正常工作。

于 2015-06-25T02:28:49.190 回答