📅  最后修改于: 2023-12-03 15:32:57.593000             🧑  作者: Mango
在使用 Mongoose 时,如果我们在创建一个新的数据实例并调用 save() 方法时出现返回 null 的情况,需要注意一下几点。
首先,我们需要检查我们的 Schema 定义是否正确。在 Mongoose 中,Schema 定义决定了我们可以存储哪些数据类型,以及每个属性的默认值和验证规则。如果我们的 Schema 中没有正确定义 _id 字段,就会出现返回 null 的情况。
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
const User = mongoose.model('User', userSchema);
const user = new User({name: 'John', age: 30});
user.save((err, savedUser) => {
if (err) {
console.error(err);
} else {
console.log(savedUser._id); // null
}
});
上面的代码中,我们没有明确地定义 _id 字段。这就意味着 Mongoose 会自动为我们生成一个 _id 字段,但在 user.save()
后,我们会得到一个 null 的 _id。
要解决这个问题,我们可以在 Schema 中定义 _id 字段:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: String,
age: Number
});
const User = mongoose.model('User', userSchema);
const user = new User({name: 'John', age: 30});
user.save((err, savedUser) => {
if (err) {
console.error(err);
} else {
console.log(savedUser._id); // ObjectId("60e49d29a0f2d24192792d7e")
}
});
现在,我们在创建 User 实例时会自动为我们生成一个 ObjectId。
如果我们的 Schema 定义没有问题,那么我们需要确保我们已经正确地连接了 MongoDB 数据库。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true});
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
const User = mongoose.model('User', userSchema);
const user = new User({name: 'John', age: 30});
user.save((err, savedUser) => {
if (err) {
console.error(err);
} else {
console.log(savedUser._id); // null
}
});
在上面的代码中,我们没有正确地连接 MongoDB 数据库。我们需要在连接数据库后执行 callback 函数,以确保数据库连接已经建立。在 then 语句块中的代码表示数据库连接成功建立,否则将会抛出错误。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true})
.then(() => {
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
const User = mongoose.model('User', userSchema);
const user = new User({name: 'John', age: 30});
user.save((err, savedUser) => {
if (err) {
console.error(err);
} else {
console.log(savedUser._id); // ObjectId("60e49d29a0f2d24192792d7e")
}
});
})
.catch(err => {
console.error('Database connection error', err);
});
在使用 Mongoose 时,如果 save() 方法返回了 null 的 _id,就需要检查我们的 Schema 定义和数据库连接代码,确保它们都没有问题。