2013-02-23 62 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