我昨天更新了我的流星并尝试使用新的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
将值htmlId
和console.log(typeof dbId, dbId);
记录到控制台中
这两个变量的值如下:
object { _str: 'a86ce44f9a46b99bca1be7a9' }
(dbId)
string ObjectID("a86ce44f9a46b99bca1be7a9")
(htmlId;这似乎是正确的,但为什么自定义类型是字符串?)
如何使用Meteor.Collection.ObjectID
正确?
答案 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