我在mongoose中设置了两个模式:
var Job = new mongoose.Schema({
title: String,
budget: Number
});
var JobModel = mongoose.model('Job', Job);
var Customer = new mongoose.Schema({
name: String,
jobs: [Job]
});
var CustomerModel = mongoose.model('Customer', Customer);
Customer模型有一系列工作模型。
我正在添加一项新工作如下:
app.post('/api/jobs', function(req, res){
var job = new JobModel({
title: req.body.title,
budget: req.body.budget
});
job.save(function(err){
if(!err){
CustomerModel.findById(req.body.customerId, function(err, customer){
if(!err){
customer.jobs.push(job);
customer.save(function(err){
if(!err){
return console.log('saved job to customer');
}
});
}
});
return console.log('created job');
} else {
return console.log(err);
}
});
return res.send(job);
});
当我添加一份新工作并获得我认为正确的所有客户时:
[{
"__v": 1,
"_id": "50f85695771aeeda08000001",
"name": "Customer1",
"jobs": [
{
"_id": "50fad6985edd968840000002",
"budget": 100,
"title": "job1"
}
]
}, ...]
现在,如果我更新job1并获取所有作业,则作业1已更新(预算现在为500)
[{
"title": "job1",
"budget": 500,
"_id": "50fad6985edd968840000002",
"__v": 0
}, ...]
但是客户工作数组中的job1保持不变。
[{
"__v": 1,
"_id": "50f85695771aeeda08000001",
"name": "Customer1",
"jobs": [
{
"_id": "50fad6985edd968840000002",
"budget": 100,
"title": "job1"
}
]
}, ...]
因此,我是否需要搜索Customer1的作业数组并找到job1作业并在每次更新或删除时更新,或者我是否完全以错误的方式完成整个嵌套操作?
我知道客户中的jobs数组是一个对象数组,但我认为它们可能只是作业的参考副本而不是重复?
答案 0 :(得分:15)
如果您使用的是Job
文档的嵌入式数组,则它们是完全独立的副本,您可以将它们与单独的jobs
集合保持同步。
另一种方法是让jobs
Customer
字段包含ObjectId
'Job'
个jobs: [{type: Schema.Types.ObjectId, ref: 'Job'}]
引用,然后使用Mongoose的query population填充它们 - 根据需要要求。
{{1}}