Meteor.js为什么要使用自己的ID算法?为什么不使用MongoDB的ObjectId()呢?
Meteor使用相同的方法来生成对象ID,如果您选择使用它:
Meteor.Collection.ObjectID()
与MongoDB的ObjectID
相同
这只是在Meteor.Collection
名称下。它使用EJSON将对象ID保持在普通JSON中传递到客户端。因为基本上有两个数据库在Meteor中。
Minimongo
这是客户端上mongodb的一种缓存。当浏览器加载时,数据从主mongodb下载到此缓存。进行更改后,它们会上传到服务器。
服务器MongoDB
这是服务器上最初的10gen mongodb
因此,由于这两个数据库,Meteor需要在Meteor.Collection
中包装mongodb功能并让您在客户端和服务器上使用相同的代码。
默认情况下,Meteor不会使用Object IDs,而是使用类似随机字母数字的文本。这样做是为了使您可以轻松地在URL和html属性中使用ID。
如果您使用new Meteor.Collection.ObjectID()
,则会获得一个ObjectID
对象,该对象将在服务器端使用mongodb的ObjectID规范。对象ID中的时间戳值不会被保存,但这实际上不会造成任何伤害。
Mongo.ObjectID
替代 Meteor.Collection.ObjectID
。其实两者是一样的。
更多的命名约定变化,请查看history.md。var newID = new Mongo.ObjectID; item._id = newID._str;
感谢这个主题:https://dev59.com/FXfZa4cB1Zd3GeqPU7bK。 - yankeyhotel
/^[0-9a-fA-F]+$/
在我的ObjectIds中返回false
... 你提到Meteor使用“随机字母数字文本”,是否有任何逻辑来测试给定的字符串是否是有效的ID? - Brad M/^[A-Za-z0-9]{17}$/
是否可行。它也不是完全由字母数字组成的,我从来没见过在_id中出现0或1。我认为那些在视觉上容易混淆的数字,比如l和1,是不会被使用的。 - Tarang