我正在使用Mongoose创建一个Mongodb数据库,其表结构类似于下面列出的Group.js文件中的表结构。当我的代码遇到findOne调用时,我收到下面列出的强制转换错误:
投放到ObjectId的值失败\" {FirstName:' John',\ n MiddleName:null,\ n LastName:' Doe' \ n地址:&# 39; 1234 Anywhere St。' } \"在路径\" _id \"
Group.js(模型文件)
let UserSchema = mongoose.Schema({
FirstName: String,
MiddleName: String,
LastName: String,
Address: String
});
let User = mongoose.model(‘User', UserSchema);
let GroupSchema = mongoose.Schema({
name: type: String,
groupType: String,
users: [UserSchema]
});
module.exports = mongoose.model('Group', GroupSchema);
GroupRepository.js(获取该组及其关联用户列表的方法调用)
findGroupPopulateUsers(paramList, cb){
this.group.findOne(paramList).populate('users').exec(function (err, entity) {
if (!err)
cb(err, entity);
else
cb(err);
});
}
在注入GroupRepository类之前声明组模型
const user = require('../models/Group');
这是我传递给findGroupPopulateUsers方法调用的paramList
{"groupType": "free"}
我对触发此错误的原因感到困惑?我试着按照文档。在mongoose网站上处理子文档填充。请告诉我关于如何填充子文档的规则中缺少的内容?
这是我注意到的一个奇怪的事情,所以子文档似乎返回,如果我没有指定" .populate(....)&我不会得到错误#34;方法调用。但是,如果我尝试访问" _id"用户子文档的字段,它不断返回未定义。
答案 0 :(得分:0)
我认为你应该为findOne函数添加.lean()。
this.group.findOne(paramList).populate('users').lean().exec(function (err, entity) {
if (!err)
cb(err, entity);
else
cb(err);
});