Mongoose查询MongoDB集合数据时name字段返回undefined问题求助
解决Mongoose strict:false下无法直接访问文档属性的问题
问题原因
你遇到的情况是Mongoose Document对象的特性导致的:当Schema设置strict: false时,那些未在Schema中定义的字段不会被挂载为Mongoose文档对象的直接属性。虽然控制台打印文档时会显示这些字段(因为控制台会遍历包括_doc在内的所有属性),但直接通过data[0].name访问时,会因为该属性不存在于Document对象上而返回undefined。而_id能正常访问是因为它是Mongoose默认处理的内置字段,不受strict选项影响。
解决方法
转成普通JavaScript对象(推荐):使用Mongoose文档的
toObject()或toJSON()方法,将Document实例转为普通JS对象,之后就能直接访问所有字段:const data = await Myschema.find({}); const plainDoc = data[0].toObject(); console.log(plainDoc.name); // 正常输出"ABC"注意:你的代码里
const data = Myschema.find({});其实返回的是Query对象,不是直接的数组,需要加上await才能拿到结果,这也是需要修正的潜在问题,记得在异步函数中使用。直接访问
_doc属性(应急方案,不推荐长期使用):Mongoose会把原始文档数据存在_doc属性里,你可以直接读取这个属性下的字段:console.log(data[0]._doc.name); // 正常输出"ABC"显式定义Schema字段(最优长期方案):如果这些字段是业务中需要使用的,建议直接在Schema里声明它们,这样Mongoose会自动将其挂载为Document的直接属性,无需额外转换:
const MySchema = new mongoose.Schema({ name: String, english: String }, { strict: false });
内容的提问来源于stack exchange,提问作者Yogesh Kumar
相关产品推荐
相关产品推荐

