【问题标题】:Cast to objectid failed for value when calling findOne and populate调用 findOne 并填充时,转换为 objectid 的值失败
【发布时间】:2017-03-17 13:02:14
【问题描述】:

我正在使用 Mongoose 创建一个 Mongodb 数据库,其表结构类似于下面列出的 Group.js 文件中的表结构。当我的代码调用 findOne 时,我收到下面列出的转换错误:

值 \"{ FirstName: 'John',\n MiddleName: null,\n LastName: 'Doe'\n Address: '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"}

我对触发此错误的原因感到困惑?我试图遵循文档。在处理子文档人口的猫鼬网站上。请让我知道我在关于如何填充子文档的规则中遗漏了什么?

这是我注意到的一件奇怪的事情,所以子文档似乎返回了,如果我不指定“.populate(....)”方法调用,我不会收到错误消息。但是,如果我尝试访问用户子文档的“_id”字段,它会不断返回未定义。

【问题讨论】:

  • 您可以将您的 paramList 添加到您的问题中吗?
  • 会的。我将添加到代码部分的底部。
  • 您可以为用户和组架构添加一个示例文档吗?
  • 维杰你什么意思?

标签: node.js mongodb mongoose


【解决方案1】:

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

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

【讨论】:

  • 试了之后问题依旧。我仍然注意到删除“.populate('Users')”调用时没有收到错误消息。但是,用户子文档中不存在“_id”字段。
  • 我认为 _id 是默认为每个集合自动生成的,还是不包括子文档?
猜你喜欢
  • 2018-03-04
  • 2019-06-11
  • 2022-01-23
  • 2020-08-25
  • 2013-03-24
  • 2017-10-24
  • 2021-06-27
  • 2021-09-05
  • 2021-03-09
相关资源
最近更新 更多