如何按插入时间对 Meteor 集合进行排序?
Posted
技术标签:
【中文标题】如何按插入时间对 Meteor 集合进行排序?【英文标题】:How can I sort a Meteor collection by time of insertion? 【发布时间】:2012-12-07 02:50:32 【问题描述】:我正在使用 Meteor 进行我的第一个项目,但在排序时遇到了一些困难。
我有一个表单,用户可以在其中输入格言,然后将格言显示在列表中。目前最新的格言会自动显示在列表的底部。有没有一种简单的方法可以让最新的出现在列表顶部?
我试过了:
Template.list.aphorisms = function ()
return Aphorisms.find(, sort: $natural:1);
;
我很困惑,因为 Meteor 文档没有太多示例。
【问题讨论】:
您可以随时添加date_created
属性并按此排序。
你的收藏怎么样?
我确实添加了一个 date_created 属性...我希望 MongoDB 不必这样做...
默认的 _id
字段已经按创建时间键控(请参阅:如何生成 Mongo ObjectID)。您可以按相反的顺序对其进行排序,而无需添加其他字段。
我担心 Meteor 使用自己的没有时间戳部分的 ObjectID
【参考方案1】:
假设date_created
与时间戳一起采用有效的日期格式,您应该使用Date.parse()
javascript 函数插入date_created
的解析值,该函数给出1970 年1 月1 日和日期之间的毫秒数date_created
中包含的值。
因此,最近添加的记录所包含的 date_created
值将大于插入它之前的记录。
现在在获取记录时,将光标按date_created
参数的降序排序为:
Aphorisms.find(, sort: date_created: -1);
这会将记录从新到旧排序。
希望这会有所帮助。
【讨论】:
这很好用..我目前只能以一种有效的方式存储日期的唯一方法是:var combinedTime = year + "" + day + "" + month + "" + 小时 + "" + 分钟 + "" + 秒; 是的,确保date_created
属性也包含有效的时间戳。因为这仅适用于 date+month+year
。
为了在 minimongo 客户端对日期进行排序,日期必须存储为字符串,例如 ISO8601 格式。 Minimongo 不知道如何对日期类型进行排序。见docs.meteor.com/#collections下的红色文字
自 12 年以来发生了一些变化:date_created
现在是 createdAt
【参考方案2】:
我发现以下是更清洁的解决方案:
Template.list.aphorisms = function ()
return Aphorisms.find().fetch().reverse();
;
鉴于整个集合已经以您想要的相反顺序存在,您可以简单地创建一个包含所有对象的数组并反转顺序。
【讨论】:
我不确定您是否真的可以依靠 Mongo 来整理您的物品。从理论上讲,是的,这是可行的——但据我所知,这并不总是一个安全的假设。 这是最安全的解决方案。 MongoDB 默认在 Meteor 中自动创建 createdAt 字段。因此,在进行大型查询时,这实际上是最安全、最干净的解决方案。 嗨,createdAt
字段不是自动创建的(也许是在您发表评论时,我使用的是 1.4.2)。您必须自己处理它,通常要感谢aldeed:collection2
包。我不确定为什么这不是默认行为,就像猫鼬或其他语言一样。
你不能相信 find 会按创建顺序获取文档以上是关于如何按插入时间对 Meteor 集合进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何按创建日期而不是名称对 Cloud Firestore 集合中的文档进行排序?