2017-10-19 18 views
0

私はMongoDBよりも多くのMySQLバックグラウンドを持っていますので、APIからデータを取得することに基づいたルーティングのベストプラクティスを理解しようとしています。MongoDBとURLルーティング

site.com/movies/12 

、その後、12のIDと映画についてのMongoDBからすべての情報を取得するしかし、モンゴのIDは自動である_idするための基準であり、ロードします。たとえば、私は、URLにアクセスしたいです生成された文字列(確かに私はURLに入れたいものではありません)。それで、これは私がムービーコレクションのすべてのエントリのために私自身のインデックスを作成しなければならないということですか?もしそうなら、私はイド以外の何かを呼ばなければならないだろうか?

カスタムキーが含まれていない例が多くありましたが、実際にはわかりません。アプリ内でsite.com/movies/59e8fdcffeeecb22334fd355にリンクしたくないのは確かですか?

答えて

0

私たちがinsert文の一部として_idを提供した場合、ドキュメントを作成する際に、ユーザが提供する値はmongodbによって取得されます。このアプローチでは、_idが一意の値である必要があります。 _idの繰り返し値を指定しても、エラーメッセージが表示されます。

私は(エラーメッセージモンゴに示すように、エラーメッセージが表示された場合、私は同じ_idで同じ文書を挿入しようとしている場合はstackoverflowの、その文書は二つの属性

db.stackoverflow.insert({ _id:1, movie:"Mission Impossible 1"}) 
WriteResult({ "nInserted" : 1 }) 

を持つという名前のサンプル収集を持っていますシェル)

WriteResult({ 
     "nInserted" : 0, 
     "writeError" : { 
       "code" : 11000, 
       "errmsg" : "E11000 duplicate key error collection: test.stackove 
rflow index: _id_ dup key: { : 1.0 }" 
     } 
}) 

ムービーコレクションを所有している場合のシナリオです。我々は便利な_idでコレクションを書き直すことができます。

_idがRDBMSのテーブルの行の主キーに相当するので、文書の_idを更新することは、不可能であることに注意してください。したがって

以下に示すように、文書_id値を変更するため、

// Find the document and store it in a variable 
doc = db.movies.findOne({_id: ObjectId("5dd45467d55f4d2d2a115502")}) 

// Give a convenient new _id 
doc._id = 1 

// Insert the document using the new _id 
db.movies.insert(doc) 

// Now we will be having two documents for the same movie, so remove the old one 
db.movies.remove({_id: ObjectId("5dd45467d55f4d2d2a115502")}) 
(新しい文書を作成し、古い文書の削除)行うことができます
関連する問題