2016-05-26 39 views
0

我對Mongoose和Node.js非常陌生我有2個模式。一個是客戶端,另一個是項目。用戶可以創建一個新項目(給它一個項目名稱),並且用戶可以創建一個新客戶端(給它一個客戶端名稱),但用戶可以選擇將客戶端添加到項目中,並可以將項目添加到客戶端。兩個Mongoose模式在通過POST驗證數據時互相引用

我想要做的是,當您執行POST請求時,您可以輸入項目名稱和客戶端名稱。客戶端名稱應該進入客戶端模式並投影到項目模式中,但我不確定一個模式如何引用另一個模式。

這是我的客戶端架構

var mongoose = require('mongoose'); 
var Project = require('./project_models'); 
var Schema = mongoose.Schema; 
// 
var clientSchema = Schema({ 
project: { type: Schema.Types.ObjectId, ref: 'Project' }, 
client: String 
}); 

module.exports = mongoose.model('Client', clientSchema); 

第二個是項目

var mongoose = require('mongoose'); 
var Client = require('./client_models'); 
var Schema = mongoose.Schema; 
// 
var projectSchema = Schema({ 
    client: { type: Schema.Types.ObjectId, ref: 'Client' }, 
    project: String 
}); 

module.exports = mongoose.model('Project', projectSchema); 

這是我的職位功能(它的工作原理,如果我只插入一個項目的名稱在它自己的,同樣與客戶端)

app.post('/project', function(req, res, next) { 
var newProject = new Project(req.body); 
newProject.save(function(err, project) { 
if (err) { return next(err); } 
return res.json(project); 
}); 

在Postman進行POST請求時,這是我輸入的 localhost3000:/項目

{ 
"client":"john", 
"project":"db" 
} 

我得到這個錯誤

「消息」: 「演員到對象ID失敗值\」 約翰\ 「的路徑\ 」客戶\「」,

感謝

回答

0

你必須事先創建一個名爲「DB」,然後將其保存,並將其添加到您的用戶,然後保存用戶的項目,你不是真的要在這兩種模式中建立關係。

或者與項目一樣的「主要型號」取決於您的使用

+0

謝謝。當我使用名稱db創建項目時,它將進入Mongodb中的我的項目集合中。我如何將它添加到用戶? – Edmond

+0

當你保存它時,你得到一個承諾,保存文檔,在這個文檔中你有一個字段_id它是你必須給你的用戶的「項目」字段的值編輯:不確定它是否返回承諾,但如果它你不能給一個回調來保存 – Spouark