我有关于如何为mongoose子文档设计我的meanjs控制器和路由的架构问题。
我的模型如下:
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Customerrpc Schema
*/
var CustomerrcpSchema = new Schema({
company: {
type: String,
enum: ['Option1', 'Option2'],
required: 'Please fill company name'
},
rcp: {
type: String,
required: 'Please fill rcp'
},
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
/**
* Customer Schema
*/
var CustomerSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Customer name',
trim: true
},
description: {
type: String,
default: '',
//required: 'Please fill Customer description',
trim: true
},
url: {
type: String,
default: '',
//required: 'Please fill Customer url',
trim: true
},
rcp: [CustomerrcpSchema],
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
mongoose.model('Customer', CustomerSchema);
mongoose.model('Customerrcp', CustomerrcpSchema);
我在创建方法期间通过在服务器控制器上添加以下代码来尝试:
exports.create = function(req, res) {
var customer = new Customer(req.body);
customer.user = req.user;
var rcp = new Customerrcp({
company: 'Option1',
rcp: 'dumm',
user: req.user
});
customer.rcp = rcp;
customer.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(customer);
}
});
};
这完全没问题。现在我的问题是从maindocument创建/修改/删除子文档的最佳过程是什么?
我想到总是使用主要文件'客户'但是这带来了一些我不喜欢的问题,就像保存孔文件一样。由于我的每个子文档都有一个uniq _id,我猜必须有更好的方法。
我想要的是仅用于具有create / save / remove语句的子文档的控制器。这甚至可能吗?
据我所知: 要创建一个新的子文档,我需要以下内容:mongoose查询的主文档的_id。所以我需要一个服务,将mandocument的_id移交给所选子文档的控制器。我能够做到这一点。
但是,如果这是正确的方式我不安全。 任何想法?
干杯, 迈克尔