Mongoose:如何让 ObjectId 即可用又可读
在 MongoDB 数据库中,每一个文档都有一个唯一的 _id 字段来表示其在数据库中的唯一性。这个 _id 字段是一个由 MongoDB 自动生成的 ObjectID 类型。
在使用 Mongoose 构建 Node.js 应用时,ObjectID 类型会经常被用到。然而,这些 ObjectID 通常在数据库中是以十六进制编码展示的,不是很直观也不易于人类阅读。为了解决这个问题,我们需要一种方法来将 ObjectID 转换成对人类友好的字符串。本文将介绍如何在 Mongoose 中进行处理。
第一步:安装依赖
我们需要安装一个 NPM 模块叫做 shortid,这是一个简单的库,用于生成短的、易于阅读的字符串 ID。
在项目中安装 shortid:
npm install --save shortid
第二步:定义 Mongoose schema
首先,我们需要定义 Mongoose schema,用于描述我们的数据模型。在定义 schema 时,我们需要将 ObjectId 类型字段以字符串类型存储。这个过程可以通过在 schema 中定义一个虚拟字段完成,例如:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------- - ------------------- ----- ------ - ---------------- ----- ------------- - --- -------- -------------- - ----- ------- --------- ---- -- ------------------- - ----- ------- -------- ---------------- - -- - ----------- ----- ------- - --------- ---- - --- ------------------------------------------- ------ ------------------------ ---
这里,我们定义了一个名为 readableIdentifier 的虚拟字段,它的值是 shortid 生成的短字符串。通过将 id 字段定义为一个虚拟字段(virtual field),我们可以在我们的应用中使用它,但是它并不会被存储在数据库中。
第三步:使用 readableIdentifier 字段
现在我们已经把 ObjectId 转换成了人类可以理解的短字符串,我们可以在代码中使用他们来查询和更新我们的数据库记录。
查询记录:
async function findByIdentifier(identifier) { return Example.findOne({ readableIdentifier: identifier }); }
更新记录:
async function updateExample(identifier, update) { return Example.findOneAndUpdate({ readableIdentifier: identifier }, update, { new: true }); }
总结
通过使用 shortid 这个库,我们在 Mongoose 应用中可以轻松地将 ObjectId 转换为可读的字符串。并且我们在定义 schema 中可以定义虚拟字段来模拟一个字符串格式的 ObjectId,这使得我们能够更容易地阅读和管理数据库记录。在实现时,需要注意该虚拟字段在查询和更新操作中的使用方式。
希望本文对 Mongoose 的初学者有所帮助。完整示例代码请参考:https://github.com/MickiFoerster/mongoose-objectid-readable
参考链接:
https://www.npmjs.com/package/shortid
https://mongoosejs.com/docs/2.7.x/docs/virtuals.html
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectId
https://github.com/MickiFoerster/mongoose-objectid-readable
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f820f2f6b2d6eab30430ec