是否有可能保留插入顺序或在Meteor中设置可靠的时间戳,因为如果没有指定排序,MongoDB不保证按插入顺序返回项目,文档的_id是随机生成的,在插入时手动设置时间戳取决于客户端的时钟?
答案 0 :(得分:7)
我建议一种方法。
Meteor.methods({
addItem: function (doc) {
doc.when = new Date;
return Items.insert(doc);
}
});
虽然客户端将在本地运行并将when
设置为其当前时间,但服务器的时间戳优先并传播到所有订阅的客户端,包括原始客户端。您可以对doc.when
进行排序。
我们可能会添加用于自动设置时间戳的钩子,作为文档验证和权限的一部分。
答案 1 :(得分:1)
如果您愿意使用类似这些集合钩子(https://gist.github.com/matb33/5258260)的东西,以及这个花哨的Date.unow
函数(即使插入了许多具有相同时间戳的文档,您也可以安全地进行排序) ):
if (!Date.unow) {
(function () {
var uniq = 0;
Date.unow = function () {
uniq++;
return Date.now() + (uniq % 5000);
};
})();
}
if (Meteor.isServer) {
// NOTE: this isn't vanilla Meteor, and sometime in the future there may be
// a better way of doing this, but at the time of writing this is it:
Items.before("insert", function (userId, doc) {
doc.created = Date.unow();
});
}