MongoDB对于每个名为“ _id”的文档都有一个字段。我看到人们到处都使用它作为主键,并在查询中使用它通过_id查找文档。
此字段默认使用自动生成的ObjectId,例如:
db.tasks.findOne()
{
_id: ObjectID("ADF9"),
description: "Write lesson plan",
due_date: ISODate("2014-04-01"),
owner: ObjectID("AAF1") // Reference to another document
}
但是在JavaScript中,对象中字段后面的下划线是私有的约定,并且由于MongoDB使用JSON(特别是BSON),我应该使用这些_id来查询,查找和描述文档之间的关系吗?似乎不正确。
我看到MongoDB有一种生成UUID https://docs.mongodb.com/manual/reference/method/UUID
的方法我应该忘记_id属性,并使用UUID创建我自己的索引id属性吗?
答案 0 :(得分:0)
将UUID用于用户生成的内容,例如命名图片上传。 UUID可以通过URL或用户在客户端检查图像时向用户公开。对于服务器上所有/未公开给用户的所有内容,都无需生成UUID,因此首选使用自动生成的_id
。
使用UUID的简单示例是:
const uuid = require('uuid');
exports.nameFile= async (req, res, next) => {
req.body.photo = `${uuid.v4()}.${extension}`;
next();
};
答案 1 :(得分:0)
MongoDB如何命名事物不会干扰您命名事物的方式。如果第三方发送的数据违反了您同意遵守的约定,则必须在数据到达应用程序后立即将其转换为所需的格式。
基于您的情况的示例:
function findTaskById(id) {
var result = db.tasks.findOne({"_id": id});
var task = {
id: result._id,
description: result.description,
something: result.something
};
return task;
}
通过这种方式,您可以将对Mongo _id
的使用隔离到负责与数据库交互的应用程序层中。在需要执行任务的所有其他地方,可以使用task.id
。