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失敗值\」 約翰\ 「的路徑\ 」客戶\「」,
感謝
謝謝。當我使用名稱db創建項目時,它將進入Mongodb中的我的項目集合中。我如何將它添加到用戶? – Edmond
當你保存它時,你得到一個承諾,保存文檔,在這個文檔中你有一個字段_id它是你必須給你的用戶的「項目」字段的值編輯:不確定它是否返回承諾,但如果它你不能給一個回調來保存 – Spouark