考虑到如果没有指定排序,MongoDB 不保证按插入顺序返回项目,文档的 _id 是随机生成的,并且在插入时手动设置时间戳取决于客户的时钟?
user391538
问问题
3078 次
2 回答
6
我建议一个方法。
Meteor.methods({
addItem: function (doc) {
doc.when = new Date;
return Items.insert(doc);
}
});
虽然客户端将在本地运行并设置when
为自己的当前时间,但服务器的时间戳优先并传播到所有订阅的客户端,包括原始客户端。你可以排序doc.when
。
作为文档验证和权限的一部分,我们可能会添加自动设置时间戳的钩子。
于 2012-05-05T21:29:02.550 回答
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();
});
}
于 2013-03-27T22:58:42.087 回答