質問

私はMongoDBのを使用するWebソケットサーバーを構築するためにNode.jsので働いています。

私はアクセスのmongo DBへのライブラリとしてノードMongoDBのネイティブを使用しています。

私は、DBからオブジェクトにはconsole.log(sys.inspect(アイテム))を呼び出すと、私はこのような何かそのルックスを取得ます:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' }
, y: 3
, favorite_color: 'orange'
, x: 14766
}

だから私は、idはモンゴが使用することをBSONオブジェクトIDです推測しています。

私はJSONを使用して、クライアントのWebブラウザにこのオブジェクトを送信する必要があり、彼らはそれにいくつかのものを行う必要があり、最後にサーバーに再び送信します。

I JSON.stringify(項目)は、私が何かを取得すると、このようになります。

{"_id":"4c3f23268ead0e8f14050000","y":3,"favorite_color":"orange","x":14766}

idは、いくつかの進エンコードされた文字列になってきたので。私はそれをクライアントに送信し、クライアントは戻ってそれを送信した場合、私は今、デシベルでそれを更新する必要があります。私はそれが通常のオブジェクトであることを取得するためにJSON.parse(項目)を実行し、それはまだこのようになります:

{ _id: '4c3f23268ead0e8f14050000'
, y: 3
, favorite_color: 'orange'
, x: 14766
}

とその_idはMongoDBの中でルックアップするために使用することはできません。

どのように私は戻ってモンゴ?

にルックアップに使用することができるようになります形式に変換することができます

- アップデート -

興味深いことに、私は、ドキュメントを取得するためにfindOne({_id:item._id}, collection)を使用することができますが、私はこれを行う場合:

findOne({_id:{id : item._id.id}}, collection)

私は結果を受信しません。私はMongoの_idオブジェクトに関する特別な何かがあると思います。

両方{_id:item._id}{_id:{id : item._id.id}} このような表情をダンプする場合:

{ _id: { id: 'L?#&\u008e\u00ad\u000e\u008f\u0014\u0005\u0000\u0000' } }

- 別のアップデートが解決---

統合テスト・ファイル内のいくつかのオブジェクトIDの操作がありました。

OBJECTID =新しいmongo.ObjectID.createFromHexString( '47cc67093475061e3d95369d'); 私が探していますという_idを与えます。

objectId.toHexString() その「47cc67093475061e3d95369d」

のように見えますが、16進文字列を返します。
役に立ちましたか?

解決

私の推測は、そのsys.inspectの解釈であるAN のObjectId のANを含むオブジェクトとしてidプロパティ。それあなたがダンプに見ているものを。

のMongoDB扱い12バイトのバイナリ値ではなく、オブジェクトとしてのObjectId。だから、MongoDBはどんなidプロパティについて知りません。

:次のクエリは、何の結果が得られていない理由です
findOne({_id: {id: item._id.id}}, collection)

以下は、作業を行い、それだけでバイナリ値として両方の値を扱うよう:

findOne({_id: item._id}, collection)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top