meteor 0.5.7:如何处理/使用Meteor.Collection.ObjectID?

net*_*ser 5 meteor objectid

我昨天更新了我的流星并尝试使用新的Meteor.Collection.ObjectID.但由于没有成功.首先,我以这种方式更新了我的收藏:

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} 现在,新的正常插入有_idWi2RmR6CSapkmmdfn......(?)

然后我有一个包含数组的集合.我喜欢为这个数组中的每个对象都有一个唯一的id.所以我$push是一个像id: new Meteor.Collection.ObjectID()我的数组一样的字段的对象.数据库中的结果如下:ObjectId("5b5fc278305d406cc6c33756").(这似乎很正常.)

但后来我想更新我推送的对象,如果id等于一个id,我之前将其作为数据属性存储在html标签中.

var equals = EJSON.equals(dbId, htmlId);(这导致每一次false,所以我记录的值dbId,并htmlId与控制台console.log(typeof dbId, dbId);)

这两个变量的值如下:

object { _str: 'a86ce44f9a46b99bca1be7a9' } (DBID)

string ObjectID("a86ce44f9a46b99bca1be7a9") (htmlId;这似乎是正确的,但为什么自定义类型是一个字符串?)

如何使用Meteor.Collection.ObjectID正确?

Aks*_*hat 8

放入你htmlId的html时你需要把它作为一个字符串而不是一个对象,记住_id现在是一个对象,把手猜测和使用toString()&那就是为什么它出现ObjectID("...").

因此,如果你{{_id}}在你的html中使用,你现在需要{{_id.toHexString}}用来正确地提取它的字符串部分

当您使用javascript提取此html值时,您需要将其恢复为objectid:

JS:

var valuefromhtml = "a86ce44f9a46b99bca1be7a9"; //Get with Jquery,DOM,etc

htmlId = new Meteor.Collection.ObjectID(valuefromhtml); //see: http://docs.meteor.com/#collection_object_id

EJSON.equals(htmlId, dbId); //Should be true this time    
Run Code Online (Sandbox Code Playgroud)

  • 嗯......我已经删除了我的集合,但我的把手调试助手,它在控制台中打印一个给定的值,什么都不打印,当我用`{{debug _id.toHexString}}`调用它时.我查看了minimongo源代码并且`{{_id._str}}`直接工作(`ObjectID.toHexString()`返回`_str`) (4认同)