如何在插入时对Meteor集合进行排序?

squ*_*ime 58 mongodb meteor mongodb-query

我正在使用Meteor进行我的第一个项目,并且在排序方面遇到了一些困难.

我有一个表单,用户输入格式然后显示在列表中.目前最新的格言会自动显示在列表的底部.是否有一种简单的方法可以让最新的内容出现在列表的顶部?

我试过了:

   Template.list.aphorisms = function () {
    return Aphorisms.find({}, {sort: {$natural:1}});
};
Run Code Online (Sandbox Code Playgroud)

我很难过,因为Meteor文档没有很多例子.

soh*_*ifa 107

假设它date_created是一个有效的日期格式以及时间戳,你应该插入date_created使用Date.parse()javascript函数的解析值,它给出1970年1月1日和包含的日期值之间的毫秒数date_created.

因此,最近添加的记录将包含date_created比在其之前插入的记录更大的值 .

现在,在获取记录时,按date_created参数的降序对游标进行排序:

 Aphorisms.find({}, {sort: {date_created: -1}});
Run Code Online (Sandbox Code Playgroud)

这会将记录从较新的分类到较旧的分类.

希望这可以帮助.


Sam*_*lis 8

我发现以下是一个更清洁的解决方案:

   Template.list.aphorisms = function () {
      return Aphorisms.find().fetch().reverse();
   };
Run Code Online (Sandbox Code Playgroud)

鉴于整个集合已经按照您想要的相反顺序存在,您可以简单地创建所有对象的数组并反转顺序.

  • 我不确定你是否真的可以依赖Mongo保持你的物品有序.理论上,是的,这是有效的 - 但就我所知,这并不总是一个安全的假设. (3认同)
  • 这是最安全的解决方案.默认情况下,MongoDB会自动在Meteor中创建一个createdAt字段.因此,在进行大型查询时,这实际上是最安全,最干净的解决方案. (2认同)
  • 嗨,`createdAt`字段不是自动创建的(也许是在评论时,我使用的是1.4.2).你必须自己处理它,通常感谢`aldeed:collection2`包.我不确定为什么这不是默认行为,就像使用mongoose或其他语言一样. (2认同)