2013-03-10 53 views

回答

34

流星使用相同的方法对对象ID的,如果你选择使用它:

Meteor.Collection.ObjectID()相同MongoDB的ObjectID

它刚下Meteor.Collection名。它使用EJSON将普通JSON中的对象标识保存到客户端。因为基本上有2个数据库与流星

Minimongo

这是一种在客户端的MongoDB的缓存。当浏览器加载时,数据从服务器上的主mongodb下载到这个数据库。当更改完成后,它们被推送到服务器。

服务器的MongoDB

这是10gen的原MongoDB的服务器上

,是因为这两个数据库流星需要Meteor.Collection包MongoDB的功能,让您使用相同的代码,同时在中客户端和服务器。

默认情况下meteor不会使用对象ID,它将使用随机字母数字文本。这样做是为了让您可以在您的网址和ID属性中轻松使用ID。

如果您确实使用new Meteor.Collection.ObjectID(),您将得到一个ObjectID对象,该对象将在服务器端使用mongodb的ObjectID规范。对象ID中的时间戳值没有被保留,但这不应该造成任何伤害。

+0

我浪费了20分钟的时间试图找出为什么正则表达式'/^[0-9a-fA-F] + $ /'正在用我的ObjectIds返回'false' ...您提到的流星使用“随机字母数字文本“,是否有任何逻辑来测试给定的字符串是否是一个有效的ID? – 2013-12-12 01:02:32

+3

@BradM你可以尝试检查'/^[A-Za-z0-9] {17} $ /'是否可以工作。它也不完全是字母数字,从未在_id中看到0或1。我认为数字比可以在视觉上混合起来,如l和1不被使用。 – Akshat 2013-12-12 05:47:11

4

由于0.9.1流星建议使用Mongo.ObjectID而不是Meteor.Collection.ObjectID。基本上都是一样的。 查询history.md了解命名约定中的更多更改。

+0

是的,看到这个,但很难找出如何获得_id字符串。使用以下内容。 'var newID = new Mongo.ObjectID; item._id = newID._str;' 感谢这个话题http://stackoverflow.com/questions/19236685/how-do-i-use-new-meteor-collection-objectid-in-my-mongo-查询与 - 流星 – yankeyhotel 2015-05-11 21:55:29