在 MongoDB 和 Mongoose 中,默认情况下,每个模型都会有一个 _id
字段作为主键来唯一标识每个文档。然而,在某些情况下,我们可能需要定义一个除 _id
外的其他字段作为主键。虽然 MongoDB 本身不支持更改默认的 _id
字段的行为,但我们可以通过使用唯一索引(unique index)使其他字段表现得像主键。
在 Mongoose 中,要定义一个字段作为实际的“主键”,可以通过设置该字段的 unique
属性为 true
来实现。这样做可以确保在该集合中该字段的值是唯一的,从而模拟主键的功能。
以下是一个如何在 Mongoose 模型中设置除 _id
外的字段作为唯一键的例子:
javascriptconst mongoose = require('mongoose'); const { Schema } = mongoose; const userSchema = new Schema({ username: { type: String, unique: true, // 设置 username 为唯一索引 required: true }, email: { type: String, unique: true, // 设置 email 也为唯一索引 required: true }, password: { type: String, required: true } }); const User = mongoose.model('User', userSchema); // 使用模型创建文档实例 const newUser = new User({ username: 'john_doe', email: 'john.doe@example.com', password: '123456' }); newUser.save() .then(doc => console.log('User saved:', doc)) .catch(err => console.error('Error saving user:', err));
在这个例子中,我们定义了一个 User
模型,其中 username
和 email
字段被设置为唯一索引。这意味着在 User
集合中,任何两个文档都不能有相同的 username
或 email
值,这样 username
和 email
这两个字段就能起到类似 _id
的作用,即标识唯一的文档。
需要注意的是,虽然我们可以设置多个字段为唯一索引,但在数据库中依然会存在一个 _id
字段,它仍然是 MongoDB 文档的默认主键。
2024年6月29日 12:07 回复