Javascript MongoDB和URL路由

Javascript MongoDB和URL路由,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有比MongoDB更多的MySQL背景,所以我只是试图找出基于从API检索数据的路由的最佳实践。例如,我想访问url: site.com/movies/12 然后加载并从MongoDB检索id为12的电影的所有信息。但是Mongo的id是对_id的引用,它是一个自动生成的字符串,我当然不想在url中包含它。那么,这是否意味着我应该为电影收藏中的每个条目创建自己的索引?如果是这样的话,我会把它叫做id以外的东西,对吗 我见过很多例子,其中没有自定义密钥,我也不太理解。当然,他们不想在他们的应用

我有比MongoDB更多的MySQL背景,所以我只是试图找出基于从API检索数据的路由的最佳实践。例如,我想访问url:

site.com/movies/12
然后加载并从MongoDB检索id为12的电影的所有信息。但是Mongo的id是对_id的引用,它是一个自动生成的字符串,我当然不想在url中包含它。那么,这是否意味着我应该为电影收藏中的每个条目创建自己的索引?如果是这样的话,我会把它叫做id以外的东西,对吗


我见过很多例子,其中没有自定义密钥,我也不太理解。当然,他们不想在他们的应用程序中链接到site.com/movies/59E8fdcffeeecb2234fd355?

创建文档时,如果我们在insert语句中提供_id,那么用户提供的值将由mongodb获取,对于这种方法,我们需要确保的是_id应该是唯一的值。不用担心,即使您为_id提供了一个重复的值,我们也会收到一条错误消息

我有一个名为stackoverflow的示例集合,它的文档有两个属性

db.stackoverflow.insert({ _id:1, movie:"Mission Impossible 1"})
WriteResult({ "nInserted" : 1 })
当我尝试插入具有相同id的同一文档时,将获得错误消息错误消息,如Mongo Shell所示

WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 11000,
                "errmsg" : "E11000 duplicate key error collection: test.stackove
rflow index: _id_ dup key: { : 1.0 }"
        }
})
如果您拥有电影收藏,则适用于您的场景。我们可以使用符合我们要求的方便id重写集合

请注意,无法更新文档的_id,因为 _id相当于RDBMS中表行的主键

因此,要更改文档_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")})