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

How do I define a different primary key other than _id in Mongoose?

6 个月前提问
5 个月前修改
浏览次数24

1个答案

1

在 MongoDB 和 Mongoose 中,默认情况下,每个模型都会有一个 _id 字段作为主键来唯一标识每个文档。然而,在某些情况下,我们可能需要定义一个除 _id 外的其他字段作为主键。虽然 MongoDB 本身不支持更改默认的 _id 字段的行为,但我们可以通过使用唯一索引(unique index)使其他字段表现得像主键。

在 Mongoose 中,要定义一个字段作为实际的“主键”,可以通过设置该字段的 unique 属性为 true 来实现。这样做可以确保在该集合中该字段的值是唯一的,从而模拟主键的功能。

以下是一个如何在 Mongoose 模型中设置除 _id 外的字段作为唯一键的例子:

javascript
const 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 模型,其中 usernameemail 字段被设置为唯一索引。这意味着在 User 集合中,任何两个文档都不能有相同的 usernameemail 值,这样 usernameemail 这两个字段就能起到类似 _id 的作用,即标识唯一的文档。

需要注意的是,虽然我们可以设置多个字段为唯一索引,但在数据库中依然会存在一个 _id 字段,它仍然是 MongoDB 文档的默认主键。

2024年6月29日 12:07 回复

你的答案