2013-02-23 2 views
5

Вчера я обновил свой метеорит и попытался использовать новый Meteor.Collection.ObjectID. Но так без успеха. Во-первых я обновил свои коллекции таким образом:метеор 0.5.7: как обращаться/использовать Meteor.Collection.ObjectID?

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} Теперь нормальные новые вставки имеют _id как Wi2RmR6CSapkmmdfn ...

Тогда у меня есть коллекция с массивом включен (?). Мне нравится иметь уникальный идентификатор для каждого объекта в этом массиве. Итак, i $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?

ответ

8

При размещении htmlId в вашем HTML вы должны поместить его в виде строки, а не как объект, помните _id является объектом сейчас, рули будет гадать и с помощью toString() & Вот почему он показывает, как ObjectID("...").

Так что, если вы используете {{_id}} в вашем HTML теперь нужно использовать {{_id.toHexString}}, чтобы правильно извлечь часть строки из него из

При извлечении этого HTML значения с помощью JavaScript вы должны сделать его обратно в ObjectID:

ЯШ:

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}}' не работает напрямую, но я зарегистрировал глобальный помощник руля, который выполняет это задание. –

+0

Он должен работать без помощника, я тестировал его перед отправкой, если у вас есть другие объекты до объекта Meteor 0.57? – Akshat

+4

Хмм ... Я удалил свои коллекции, но мой помощник по отладке ручек, который печатает заданное значение в консоли, ничего не печатает, когда я вызываю его с помощью '{{debug _id.toHexString}}'. Я посмотрел на источники minimongo и '{{_id._str}}' работает напрямую ('ObjectID.toHexString()' возвращает '_str') –

Смежные вопросы