Mongoose中populate数组内字段遇StrictPopulateError问题求助
正确填充Mongoose数组内关联字段的方法
你报错的核心原因是:from和to是嵌套在messages数组里的子文档字段,直接用from/to作为populate路径时,Mongoose找不到顶层的对应字段,因此触发StrictPopulateError。
解决方法很简单,使用完整的嵌套路径指定要填充的字段即可,无需额外设置strictPopulate: false,具体有两种写法:
写法一:数组对象配置(适合需要单独设置每个字段填充规则的场景)
const chat = await chatModel.findOne({ $or: [ {POne: req.user._id, PTwo: destId}, {POne: destId, PTwo: req.user._id}, ] }).populate([ { path: "POne" }, { path: "PTwo" }, { path: "messages.from" }, { path: "messages.to" } ])
写法二:空格分隔字符串(适合简单场景,写法更简洁)
const chat = await chatModel.findOne({ $or: [ {POne: req.user._id, PTwo: destId}, {POne: destId, PTwo: req.user._id}, ] }).populate("POne PTwo messages.from messages.to")
进阶:自定义返回字段
如果不需要返回关联User文档的全部字段,可以在populate配置中添加select选项,比如只返回用户名和头像:
const chat = await chatModel.findOne({ $or: [ {POne: req.user._id, PTwo: destId}, {POne: destId, PTwo: req.user._id}, ] }).populate([ { path: "POne", select: "username avatar" }, { path: "PTwo", select: "username avatar" }, { path: "messages.from", select: "username avatar" }, { path: "messages.to", select: "username avatar" } ])
内容的提问来源于stack exchange,提问作者gehad
相关产品推荐
相关产品推荐

