为什么我要确保Meteor中的唯一时间戳?

时间:2013-02-21 00:12:29

标签: meteor

我正在学习meteor并阅读todos示例:

$ curl https://install.meteor.com | sh
$ meteor create --example todos

在第50行的todos/server/bootstrap.js中,有如下行。

var timestamp = (new Date()).getTime();
for (var i = 0; i < data.length; i++) {
  var list_id = Lists.insert({name: data[i].name});
  for (var j = 0; j < data[i].contents.length; j++) {
    var info = data[i].contents[j];
    Todos.insert({list_id: list_id,
                  text: info[0],
                  timestamp: timestamp,
                  tags: info.slice(1)});
    timestamp += 1; // ensure unique timestamp.
  }
}

我想知道为什么我们需要确保时间戳是唯一的?是meteor / mongodb还是只需要特定于应用程序?

1 个答案:

答案 0 :(得分:3)

时间戳不是必需的,也不必是唯一的,在这种情况下它的应用是特定的。

这里的用例只是为了使每个待办事项都有一个顺序时间戳,以便它以正确的顺序显示它,如在客户端js中看到的那样,最旧的位于顶部,最新的位于底部。

Template.todos.todos = function () {
  ...
  return Todos.find(sel, {sort: {timestamp: 1}});
};

服务器js使用为循环中的每个项添加1微秒来模拟可能与实际用户一起放置的排序顺序。它只创建一次示例数据库。

如果没有排序顺序/顺序时间戳,则todos将按记录_id排序,这将使他们的顺序最佳,随机。原因是流星使用Meteor.uuid()生成其_id字段,这些字段是随机的&amp;没有顺序性。