Node.js连接MongoDB Atlas查询数据字段返回undefined如何解决
问题场景
在Node.js应用中对接MongoDB Atlas,读取sample_mflix库下movies集合数据时,已成功建立数据库连接并拉取到文档,但除_id字段外,访问其余字段(如title)均返回undefined。
相关代码与截图
模型文件 movie.js
const mongoose = require("mongoose"); const { Schema } = mongoose; require("dotenv").config(); const mongoDB_API = process.env.MONGODB_API_KEY; const mflixDB = mongoose.createConnection(mongoDB_API).useDb("sample_mflix"); const Movies = mflixDB.model("Movie", new Schema({}), "movies"); module.exports = Movies;
该模型写法参考Mongoose操作已有预创建集合的通用实现方案。
MongoDB Atlas集合数据片段:
业务逻辑文件 app.js
const express = require('express'); const bodyParser = require('body-parser'); const _ =require('lodash'); const mongoose = require('mongoose'); require('dotenv').config(); const app = express(); app.set("view engine","ejs"); app.use(bodyParser.urlencoded({extended:true})); app.use(express.static('public')); const Movies = require('./model/mflix/movies'); app.get("/movies",async (req, res) => { const ourMovies = await Movies.find().sort({'date': -1}).limit(2); console.log("WE recieved: \n") console.log(ourMovies); const titles =[]; ourMovies.forEach( x=>{ console.log(x._id, x.title) }) res.render("movies", { recievedList: ourMovies }); });
代码运行控制台输出:
问题原因
问题根源是Schema配置错误。定义模型时传入了空Schemanew Schema({}),Mongoose默认开启严格模式(strict: true),会自动过滤所有未在Schema中显式声明的字段,仅保留默认生成的_id字段,因此访问其他字段时都会返回undefined。
修复方案
二选一即可:
- 方案1(长期维护推荐):在Schema中显式声明业务需要用到的字段及对应类型,示例修改如下:
// 替换movie.js中原有的模型定义代码 const movieSchema = new Schema({ title: String, year: Number, plot: String, released: Date, // 其余需要使用的字段,按照MongoDB中存储的类型依次声明即可 }) const Movies = mflixDB.model("Movie", movieSchema, "movies");
- 方案2(快速验证/临时场景适用):给Schema添加
strict: false配置,告知Mongoose不要过滤未在Schema中声明的字段,查询返回的所有字段都会正常保留:
// 替换movie.js中原有的模型定义代码 const Movies = mflixDB.model("Movie", new Schema({}, {strict: false}), "movies");
修改完成后重启Node服务,再访问文档的title等字段即可正常获取对应值。
内容的提问来源于stack exchange,提问作者Ro7an
相关产品推荐
相关产品推荐

