调用findOne并填充

时间:2016-11-03 19:49:50

标签: node.js mongodb mongoose

我正在使用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"用户子文档的字段,它不断返回未定义。

1 个答案:

答案 0 :(得分:0)

我认为你应该为findOne函数添加.lean()。

this.group.findOne(paramList).populate('users').lean().exec(function (err, entity) {
       if (!err)
           cb(err, entity);
       else
           cb(err);
       });