乐闻世界logo
搜索文章和话题

Mongoose 如何生成 objectID 类型数据?

1个答案

1

在 Mongoose 中,ObjectId 是 MongoDB 的一种数据类型,用于唯一标识文档。Mongoose 使用 MongoDB 下层的 bson 库来生成 ObjectId

当你在 Mongoose 模型中定义了一个字段类型为 ObjectId,比如在用户模型的定义中:

js
const mongoose = require('mongoose'); const { Schema } = mongoose; const userSchema = new Schema({ name: String, // 定义 ObjectId 类型字段 _id: Schema.Types.ObjectId }); const User = mongoose.model('User', userSchema);

在你创建一个新文档并保存到数据库中时,Mongoose 会自动为这个 _id 字段生成一个新的 ObjectId。例如:

js
const newUser = new User({ name: 'John Doe' }); newUser.save((err, savedUser) => { if (err) throw err; // savedUser._id 将会是一个自动生成的 ObjectId console.log(savedUser._id); });

如果你没有显式地在你的模型定义中声明 _id 字段,Mongoose 会默认为你的每个文档添加一个 _id 字段,并自动生成一个 ObjectId

ObjectId 是一个 12 字节的值,通常由以下几部分构成:

  1. 4字节的时间戳,表示 ObjectId 的创建时间。
  2. 5字节的随机值,为了确保在同一时间生成的 ObjectId 是唯一的。
  3. 3字节的增量计数器,从随机值开始。

这种结构确保即使在大量操作下,生成的 ObjectId 也是唯一且按时间顺序排列的。

在某些情况下,你可能需要手动生成一个 ObjectId。你可以使用 Mongoose 提供的 Types 对象来做到这一点:

js
const { Types } = require('mongoose'); const objectId = new Types.ObjectId();

现在 objectId 变量就包含了一个新生成的 ObjectId 实例,可以用在任何需要 ObjectId 的地方。

2024年6月29日 12:07 回复

你的答案