当通过POST传送数据时,两个Mongoose模式相互引用

时间:2016-05-26 11:29:25

标签: node.js post mongoose

我是Mongoose和Node.js的新手,我有2个架构。一个是客户,另一个是项目。用户可以创建一个新项目(给它一个项目名称),用户可以创建一个新客户端(给它一个客户端名称),但用户可以选择将一个客户端添加到项目中,并可以将项目添加到客户端。

我想要做的是,当您执行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);
});

On Postman在执行POST请求时,这就是我输入的内容 localhost3000:/项目

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

我收到此错误

  

" message":"强制转换为ObjectID失败\" john \"在路径\"客户端\"",

由于

1 个答案:

答案 0 :(得分:0)

您必须先创建名为“db”的项目,然后将其保存并添加到您的用户,然后保存您的用户,并且您不应该在两种模型中建立关系。

或者相同但项目为“主要模型”取决于您对它的使用