2013-02-23 72 views
5

我昨天更新了我的流星,并尝试使用新的Meteor.Collection.ObjectID。 但自从没有成功。首先,我更新了我的藏品以这样的方式流星0.5.7:如何处理/使用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所以我记录的值dbIdhtmlIdconsole.log(typeof dbId, dbId);控制台)。

这两个变量的值如下:

object { _str: 'a86ce44f9a46b99bca1be7a9' }(DBID)

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

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

回答

8

放置当你的htmlId在你的HTML,你需要把它作为一个字符串,而不是作为一个对象,记得_id是一个对象,现在,把手被猜测和使用toString() &这就是为什么它显示为ObjectID("...")

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

当你与你的JavaScript提取这个网站价值,你需要使它回到一个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  
+0

**谢谢你的快速解答! :)** Btw:'{{_id.toHexString}}'不直接工作,但我注册了一个全局的handlebars helper,它可以完成这项工作。 – 2013-02-23 17:57:16

+0

它应该没有帮助者的工作,我发布之前测试它是否有其他预先流星0.57对象id? – Akshat 2013-02-23 17:59:01

+4

嗯......我删除了我的集合,但是我的handlebars调试帮助器,它在控制台中打印给定的值,当我用'{{debug _id.toHexString}}'调用他时不打印任何内容。我查看了minimongo的源代码,并且{{_id._str}}直接工作('ObjectID.toHexString()'返回'_str') – 2013-02-23 22:22:15