_id在MEAN应用程序中从ObjectId转换为字符串

时间:2016-09-20 16:09:25

标签: angularjs node.js mongodb express

我有一个MEAN堆栈应用程序。

在我的数据库中,文档有一个像这样的mongo ObjectId:

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

但是当我在前端加载文档时,_id会转换为字符串,并且在浏览器中登录时我的对象看起来像这样:

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

令人讨厌的是,当我想从我的前端修改我的数据库(更新或删除现有文档)时,我必须将_id从字符串转换为ObjectId,以便在我的数据库中定位文档... 因此,在我的节点应用程序中,我必须系统地使用new ObjectId(stringId)按下_id,因为浏览器发送的ID是字符串......

很明显,我错过了一些东西。 我怎样才能让事情更优雅?

3 个答案:

答案 0 :(得分:1)

使用ObjectId()将字符串转换为objectId是正常的,因为当您将其传递给Web时,它将转换为json字符串,因此它不再是objectId,而是当您在服务器端使用文档中的objectid时那种情况你不需要把它转换成objectid。

如果你的_id类型是字符串,你总是需要objectId()构造函数。

答案 1 :(得分:0)

你使用mongodb的模块,我觉得猫鼬? 如果您使用的是mongoose,那么您不必将_id转换为ObjectId,只需使用字符串运行查询。

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

答案 2 :(得分:0)

感谢您的回复。

因此,在MEAN应用程序中发生的显而易见的事情是,文档的ObjectIds将被转换为字符串,因为它们被用作JSON对象。 当记录Mongo生成的ID返回数据库的前端对象时,需要大量使用 chart.xAxis[0].addPlotBand({ from: 5.5, to: 7.5, color: '#FCFFC5', id: 'plot-band-1' }); ...

除了使用Mongoose之外还有其他选择吗?我现在非常高兴使用标准节点mongo驱动程序,除了这个字符串转换问题...