在 MongoDB 中,每个文档都有一个唯一的 _id 字段,它是由 MongoDB 自动生成的。然而,在某些情况下,我们可能希望使用自定义的 id 字段来代替 MongoDB 自动生成的 _id 字段。在 Mongoose 中,实现自定义 id 字段的方法非常简单,本文将介绍如何实现以及注意事项。
实现方法
在 Mongoose 中,要实现自定义 id 字段,只需要在 Schema 中定义一个名为 id 的字段,并将其设置为 String 类型即可。例如:
// www.javascriptcn.com code example
const mongoose = require('mongoose');
const schema = new mongoose.Schema({
id: { type: String, required: true, unique: true },
name: { type: String, required: true },
age: { type: Number, required: true }
});
const Model = mongoose.model('Model', schema);在上面的例子中,我们定义了一个名为 id 的字段,并将其设置为 String 类型。同时,我们还将 id 字段设置为必需的,并且唯一。这样,每个文档都必须有一个唯一的 id 值。
在保存文档时,我们需要手动为每个文档生成一个唯一的 id 值。例如:
const model = new Model({ id: '123', name: 'Alice', age: 18 });
model.save();在上面的例子中,我们手动为文档生成了一个 id 值,并将其保存到数据库中。
注意事项
在使用自定义 id 字段时,需要注意以下几点:
id字段必须是唯一的,否则会导致保存失败。id字段必须是字符串类型,否则会导致保存失败。- 如果使用自定义 id 字段,那么查询文档时需要使用
findById方法,而不是findOne方法。例如:
Model.findById('123', (err, doc) => {
console.log(doc);
});在上面的例子中,我们使用 findById 方法查询 id 为 123 的文档。
- 如果需要将自定义 id 字段作为索引,需要在 Schema 中定义该字段为索引。例如:
const schema = new mongoose.Schema({
id: { type: String, required: true, unique: true, index: true },
name: { type: String, required: true },
age: { type: Number, required: true }
});在上面的例子中,我们将 id 字段定义为索引。
示例代码
下面是一个完整的示例代码,演示如何实现自定义 id 字段:
// www.javascriptcn.com code example
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });
const schema = new mongoose.Schema({
id: { type: String, required: true, unique: true, index: true },
name: { type: String, required: true },
age: { type: Number, required: true }
});
const Model = mongoose.model('Model', schema);
const model = new Model({ id: '123', name: 'Alice', age: 18 });
model.save();
Model.findById('123', (err, doc) => {
console.log(doc);
});在上面的示例代码中,我们定义了一个名为 Model 的模型,并手动为文档生成了一个 id 值。最后,我们使用 findById 方法查询 id 为 123 的文档,并输出该文档的内容。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d52932a941bf713498925a