Mongoose自引用模型中populate()方法无效问题排查
Mongoose自引用模型populate()方法无效果问题
我确认代码中已调用populate()方法(传入错误路径会报错),但该方法似乎未产生任何效果。我在Stack Overflow搜索后未找到自引用模型相关案例,因此怀疑问题出在自引用上。我参考了Mongoose官方文档学习populate()的用法。
我的模型
const mongoose = require('mongoose'); const schema = new mongoose.Schema({ firstName: { type: String }, lastName: { type: String }, email: { type: String, unique: true }, teamLeaders: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Agent' }], teamMembers: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Agent' }] }); let Agent = mongoose.model('Agent', schema); Agent.init(); module.exports = Agent;
MongoDB Atlas中的实际文档(已匿名化姓名和邮箱)
{ "_id": { "$oid": "62e3e0ab57560a5c15a535e0" }, "teamLeaders": [], "teamMembers": [ { "$oid": "62e3f548678dbed5593acc8e" }, { "$oid": "62e3f548678dbed5593acc91" }, { "$oid": "62e3f548678dbed5593acc94" }, { "$oid": "62e3f548678dbed5593acc97" }, { "$oid": "62e3f548678dbed5593acc9a" }, { "$oid": "62e3f548678dbed5593acc9d" }, { "$oid": "62e3f548678dbed5593acca0" }, { "$oid": "62e3f548678dbed5593acca3" } ], "firstName": "John", "lastName": "Smith", "email": "john@smith.com", "__v": 8 }
调用populate()的代码
const Agent = require('../models/agents'); const mongoose = require("mongoose"); const db = require("../config/db"); mongoose.connect(process.env.MONGODB_URI || db.url); // 已移除无关函数,数据库连接正常 // 代码中的实际私有函数 async function addAgent(firstName, lastName, email, isTeamLeader, teamLeader) { let newAgent = Agent(); newAgent.firstName = firstName; newAgent.lastName = lastName; newAgent.email = email; if (isTeamLeader) { await newAgent.save(); } else { newAgent.teamLeaders.push(teamLeader); let savedAgent = await newAgent.save(); teamLeader.teamMembers.push(savedAgent); await teamLeader.save(); } } // 用于展示创建代理方式的示例函数 async function createAgents() { await addAgent('John', 'Smith', 'john@smith.com', true, null); // 稍后手动调用addAgent(),因团队仅30人 // 因此仅通过firstName查询,团队内仅有一个John let teamLeader = await Agent.findOne({ firstName: 'John' }); await addAgent('Peter', 'Parker', 'peter@parker.com', false, teamLeader); } // 调用populate()的核心函数 async function mainFunction() { Agent.findOne({ firstName: 'John' }).populate({ path: 'teamMembers', model: 'Agent' }).exec((err, agent) => { if (err) return handleError(err); console.log('Populated agent: ' + agent); }); }
内容的提问来源于stack exchange,提问作者jon2512chua
相关产品推荐
相关产品推荐

