How to use timestamps and preserve insertion order in Meteor?

故事扮演 提交于 2020-01-14 13:32:07

问题


Is it possible yet, to preserve insertion order or set reliable timestamps in Meteor given that MongoDB doesn't guarantee to return items in insertion order if no sort is specified, a document's _id is randomly generated and setting a timestamp manually on insertion would depend upon the client's clock?


回答1:


I suggest a method.

Meteor.methods({
  addItem: function (doc) {
    doc.when = new Date;
    return Items.insert(doc);
  }
});

While the client will run this locally and set when to its own current time, the server's timestamp takes priority and propagates to all subscribed clients, including the original client. You can sort on doc.when.

We'll probably add hooks for setting timestamps automatically as part of document validations and permissions.




回答2:


If you're willing to use something like these collection hooks (https://gist.github.com/matb33/5258260), along with this fancy Date.unow function (which you can safely sort on even if many documents were inserted with the same timestamp):

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


来源:https://stackoverflow.com/questions/10465673/how-to-use-timestamps-and-preserve-insertion-order-in-meteor

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!