【问题标题】:Cast to objectid failed for value object object at path mongoose路径 mongoose 的值对象对象转换为 objectid 失败
【发布时间】:2014-03-14 06:55:12
【问题描述】:

我是 NodeJS 和 MongoDB 的新手,在创建示例应用程序时遇到了以下问题

// ************  this is  testusers.js file  ************//

var userdetails = require('userdetails');
var mongoose = require('mongoose');
var schema = mongoose.Schema;

var geekDetails = new schema({
    description: String,
    details: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userDetails'
    }
});
module.exports = {
    model: mongoose.model('geekDetails',geekDetails),
    schema: geekDetails
};


// ************  this is  user.js file  ************//

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var userDetails = new schema({
    firstName: String,
    lastName: String,
    email: String,
    password: String
});

module.exports = {
    model: mongoose.model('userDetails',userDetails),
    schema: userDetails
};


// ************  this is  create.js file [used to save the details to DB]  *******//

var testusers = require('testusers.js');
var mongoose = require('mongoose');

adduser = function(firstName,lastName,email,password,passwordConfirmation,description,callback){

    new testusers.model({
        description: description,
        details: {
            firstName: firstName,
            lastName: lastName,
            email: email,
            password: password
        }
    }).save(function(err,result){
        if (err){
            callback(err,null);
        }
        else {
            callback(null,result);
        }
    });

当我尝试保存详细信息时,它返回以下错误“cast to objectid failed for value object object at path 'details'” 我确定我在架构上做错了,但我不能想不通。

提前致谢

【问题讨论】:

  • mongoose.Types.ObjectId怎么样?

标签: node.js mongodb mongoose


【解决方案1】:

像这样保存参考文档不适用于猫鼬这种方式。这是一种选择。本质上,您需要先保存嵌入文档 (userdetails),然后使用 id 保存父文档 (testuser)。

adduser= function(firstName,lastName,email,password,passwordConfirmation,
    description,callback){

    new userDetails.model({
        firstName:firstName,
        lastName:lastName,
        email:email,
        password:password
    }).save(function(err,doc){
        new testusers.model({
            description:description,
            details: doc._id
        }).save(function(err,result){
            if(err){callback(err,null);}
            else{callback(null,result);}
        });
    });
}

使用 Promise 可能会使这段代码更易于阅读,但这应该会给出想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2014-04-21
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多