Mongoose中user.save()未返回生成的_id,数据库已正常存储数据
问题分析与解决方案
你的问题核心是调用save()后返回的文档缺失_id,但数据库已成功生成并存储ID,主要原因集中在模型定义不完整和导入错误这两点,以下是具体修复方案:
1. 修正Mongoose导入方式
你当前的导入语句是错误的,Mongoose采用默认导出,而非命名导出:
// 错误写法 import { mongoose } from "mongoose"; // 正确写法 import mongoose from "mongoose";
错误的导入会导致Mongoose对象未正确初始化,引发异常行为。
2. 补充User模型定义
你仅定义了userSchema,但没有通过Mongoose生成对应的User模型,这是导致实例化后文档异常的关键。需添加模型创建代码:
const User = mongoose.model('User', userSchema);
完整的模型定义+导出代码如下:
import mongoose from "mongoose"; const Schema = mongoose.Schema; const userSchema = new Schema({ name: { type: String, required: true, }, age: { type: Number, required: true, }, email: { type: String, required: true, }, }); // 生成User模型并关联Schema const User = mongoose.model('User', userSchema); export const addUser = async (_user) => { let user = new User({ ..._user }); let result; try { result = await user.save(); console.log(result._id); // 现在会输出正确的ID } catch (err) { console.log(err); } return result; };
3. 替代方案:使用create()方法
如果上述修复后仍有问题,可以直接使用Mongoose的create()方法,它会自动处理实例化与保存,并返回包含完整_id的文档:
export const addUser = async (_user) => { let result; try { result = await User.create(_user); console.log(result._id); } catch (err) { console.log(err); } return result; };
内容的提问来源于stack exchange,提问作者Moayad Ahmad
相关产品推荐
相关产品推荐

