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

时间:2013-02-23 13:37:56

标签: meteor objectid

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

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} 现在,普通的新插入内容有_id,如Wi2RmR6CSapkmmdfn ...(?)

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

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

var equals = EJSON.equals(dbId, htmlId);(每次都会在false中生成。因此我使用dbId将值htmlIdconsole.log(typeof dbId, dbId);记录到控制台中

这两个变量的值如下:

object { _str: 'a86ce44f9a46b99bca1be7a9' }(dbId)

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

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

1 个答案:

答案 0 :(得分:8)

htmlId放入html时,您需要将其作为字符串而不是对象放入,请记住_id现在是一个对象,把手正在猜测并使用toString() &安培;这就是为什么它显示为ObjectID("...")

因此,如果您在html中使用{{_id}},则现在需要使用{{_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