我有一个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是字符串......
很明显,我错过了一些东西。 我怎样才能让事情更优雅?
答案 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驱动程序,除了这个字符串转换问题...