如何在Meteor中使用时间戳并保留插入顺序?

时间:2012-05-05 20:23:21

标签: meteor

是否有可能保留插入顺序或在Meteor中设置可靠的时间戳,因为如果没有指定排序,MongoDB不保证按插入顺序返回项目,文档的_id是随机生成的,在插入时手动设置时间戳取决于客户端的时钟?

2 个答案:

答案 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();
    });
}