我正在编写一个JavaScript框架,该框架使用MongoDB作为其数据库驱动程序。 MongoDB不是唯一的驱动程序,并且该框架并不是专门针对仅与MongoDB一起工作的。框架中驱动程序的目的是将框架数据库调用转换为MongoDB驱动程序调用(在这种情况下)。
到目前为止,太好了。当我与_id字段进行交互时,开始出现问题,该字段同时使用ObjectId作为主键和引用其他集合。
此刻我面临的主要问题是,如果我在前端使用一个id列表(例如select DOM元素),则必须将ObjectID转换为字符串。但是,当我在一个字段中保存引用另一个集合的文档的文档时,需要将字符串转换回ObjectID。
这不是在驱动程序中实现的大事(查找键类型以_id结尾的String类型的值),但对于嵌入文档或包含ObjectIds列表的数组字段,它确实开始变得讨厌。在框架内无法对该数组执行常规的.includes或.filter操作,除非将数组映射为字符串。而且由于可以无限地嵌入文档,所以我发现在开发更复杂的应用程序时,文档只会变得更加混乱。
我想过的一件事是放弃使用MongoDB的本机_id机制并实现我自己的文档唯一字段,但是在我看来这既浪费资源又不是真正的高性能。
有没有解决这个问题的好方法?
答案 0 :(得分:0)
我们有同样的问题。我们最终改为使用UUID字符串,这要容易得多。但是,通过Node.js驱动程序,我们为我们使用了转换后的ObjectID到字符串,它从前端回到后端,我们需要一些代码段:
免责声明:这是内存中的信息,不完全是
function someRequest(id, ...)
try {
var oid = new ObjectID(id);
if (!oid.isValid()) {
throw new Error("Not an object ID");
}
} catch (e) {
console.error(e);
var oid = id;
}
但是效果更好,只是为ID生成UUID字符串,我们并没有遇到约100个并发用户的性能问题。