5

我昨天更新了我的流星并尝试使用新的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。所以我将值记录dbIdhtmlId控制台中console.log(typeof dbId, dbId);

这两个变量的值如下:

object { _str: 'a86ce44f9a46b99bca1be7a9' }(dbId)

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

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

4

1 回答 1

8

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

因此,如果您{{_id}}在 html 中使用,您现在需要使用{{_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    
于 2013-02-23T16:56:43.607 回答