4

並べ替えが指定されていない場合、MongoDBが挿入順序でアイテムを返すことを保証しない場合、挿入順序を保持したり、Meteorで信頼できるタイムスタンプを設定したりすることはまだ可能ですか?ドキュメントの_idはランダムに生成され、挿入時に手動でタイムスタンプを設定することはクライアントの時計?

4

2 に答える 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 に答える