📜  mongoose save 返回 null id - Javascript (1)

📅  最后修改于: 2023-12-03 15:32:57.593000             🧑  作者: Mango

Mongoose save 返回 null id - Javascript

在使用 Mongoose 时,如果我们在创建一个新的数据实例并调用 save() 方法时出现返回 null 的情况,需要注意一下几点。

1. Schema 定义

首先,我们需要检查我们的 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。

2. 数据库连接

如果我们的 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 定义和数据库连接代码,确保它们都没有问题。