2014-02-14 55 views
1

我是新來的NodeJS和MongoDB,並通過以下問題跑,而創建一個示例應用程序演員到OBJECTID失敗值的對象在路徑貓鼬

// ************ 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); 
     } 
    }); 

當我試圖挽救細節,它返回以下錯誤「投向objectid失敗的價值對象的對象在路徑'細節'」我相信我在做模式錯了,但我無法弄清楚。

在此先感謝

+0

如何使用'mongoose.Types.ObjectId'? –

回答

2

像這樣保存參考文檔不會用這種方法與貓鼬一起工作。這是一個選擇。實質上,您需要先保存嵌入文檔(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);} 
     }); 
    }); 
} 

使用承諾可能會使此代碼更好閱讀,但這應該給出這個想法。

+0

感謝kiran,這節省了我很多時間 – mahesh

相關問題