2016-09-20 10 views
0

私はMEANスタックアプリケーションを持っています。私のデータベースで_idはMEANアプリケーションでObjectIdから文字列に変換されます

、文書には、同じようモンゴOBJECTIDました:

{ "_id" : ObjectId("57e15b1009cb82cafafafd73"), "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

しかし、私は私のフロントエンドでドキュメントを読み込む際に、_idは、文字列に変換されます、そして、私のオブジェクトはときに、このようになります。ブラウザでログイン:

何迷惑であることは、私は私のフロントエンド(既存のドキュメントを更新または削除)から自分のデータベースを変更したいとき、私はするために、文字列からのObjectIdに_idを変換しなければならないことである
{ "_id" : "57e15b1009cb82cafafafd73", "name" : "Hello", "artist_id" : "world", "year" : "2000" } 

データベース内のドキュメントをターゲットに設定してください... 私のノードアプリケーションでは、ID番号new ObjectId(stringId)をシステマティックにマッサージする必要があります。なぜなら、ブラウザから送られたIDは文字列であるからです。

Obvisouly私は何かを逃しています。 私は物事をよりエレガントにするにはどうすればいいですか?

+0

'new ObjectId(stringId)'については何も問題ありません。 JavaScriptに* ObjectId *型がないので、mongoのObjectIdメソッドを使用して1つにキャストする必要があります。 – Molda

+0

'ObjectId'はJSONでサポートされている型ではなく、' String'への(必要な)変換です。 – robertklep

+0

これは@Moldaで述べたように普通ですが、私はspring-data mongoドライバを使い、JavaのようにクラスIDをStringとしてマッピングしました。ObjectIdデータ型はありません。ドライバはほとんどの作業を行いますが、 'new ObjectId (id) 'を返します。ドライバーは、私たちが望むほど成熟していないかもしれません。 –

答えて

0

mongodbに使用するモジュールは何ですか、私はモンゴーズと思いますか? mongooseを使用している場合は、_idをObjectIdに変換する必要はありません。文字列でクエリを実行するだけです。

db.collection.find({_id: "57e15b1009cb82cafafafd73"}); 
+0

私はmongooseを使用していません。 – Lev

+0

ノードアプリケーションでmongodbを接続するために使用するものは? –

+0

let mongo = require( 'mongodb'); – Lev

1

これは、あなたがウェブにそれを渡しているとき、それはJSON文字列として変換されますので、それはもうOBJECTIDではないので、のObjectId()を使用してOBJECTIDなどの文字列を変換するために、通常のですが、ドキュメントからのOBJECTIDでを使用しているときその場合はサーバー側でobjectidに変換する必要はありません。

あなたの_idタイプが文字列の場合、常にobjectId()コンストラクタが必要です。

0

あなたの返信ありがとうございます。

MEANアプリケーションで明らかになることは、ドキュメントのObjectIdがJSONオブジェクトとして消費されるときに文字列に変換されることです。 Mongoによってデータベースに生成されたIDをフロントエンドに記録するときにnew ObjectId()を頻繁に使用する必要があります...

Mongooseを使用する以外のオプションはありますか?私はこの文字列変換の問題以外に標準ノードのmongoドライバを使用して非常に満足しています...

関連する問題