5

昨日流星を更新し、新しいを使ってみましたMeteor.Collection.ObjectID。しかし、成功しなかったので。まず、コレクションを次のように更新しました。

myCollection = new Meteor.Collection('mycollection', {idGeneration: 'MONGO'} さて、通常の新しいインサートには次の_idようなものがありWi2RmR6CSapkmmdfnます...(?)

次に、配列が含まれているコレクションがあります。この配列内のすべてのオブジェクトに一意のIDを設定するのが好きです。だから私は私の配列$pushのようなフィールドを持つオブジェクトです。id: new Meteor.Collection.ObjectID()データベースの結果は次のようになりますObjectId("5b5fc278305d406cc6c33756")。(これは正常なようです。)

しかし、後で、プッシュされたオブジェクトを更新したいと思います。idこれは、以前にhtmlタグにデータ属性として保存したidと等しい場合です。

var equals = EJSON.equals(dbId, htmlId);(これは毎回結果になりfalseます。したがって、値dbIdをログインhtmlIdしてコンソールにログインしましたconsole.log(typeof dbId, dbId);

この2つの変数の値は次のとおりです。

object { _str: 'a86ce44f9a46b99bca1be7a9' }(dbId)

string ObjectID("a86ce44f9a46b99bca1be7a9")(htmlId;これは正しいようですが、カスタムタイプが文字列であるのはなぜですか?)

Meteor.Collection.ObjectID正しい使い方は?

4

1 に答える 1

8

HTMLに配置するときhtmlIdは、オブジェクトとしてではなく文字列として配置する必要があります。これはオブジェクトであることを忘れないでください_id。ハンドルバーは推測して使用しtoString()ているため、として表示されObjectID("...")ます。

したがって、HTMLで使用している場合は、HTMLの文字列部分を適切に抽出する{{_id}}ために使用する必要があります。{{_id.toHexString}}

このhtml値を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    
于 2013-02-23T16:56:43.607 に答える