通常在mongoose中保存嵌套的对象,通过父亲的调用方法save,但是如果我们有两层约定,祖父,父亲[nested],儿子[nested],儿子是不会通过父亲的调用方法save来保存的.
祖父 -> 组
var schema = new mongoose.Schema({
name: String,
days:[mongoose.Schema.Types.Day],
});
module.exports = mongoose.model('Group', schema);
父亲 -> 日
var schema = new mongoose.Schema({
_id: Number,
matches:[mongoose.Schema.Types.Match]
});
module.exports = mongoose.model('Day', schema);
儿子 -> 匹配
var schema = new mongoose.Schema({
team1: {
type: Schema.ObjectId,
ref:'Team'
},
team2: {
type: Schema.ObjectId,
ref: 'Team'
},
score: [Number]
});
module.exports = mongoose.model('Match', schema);
在路由(“matches.js”)中,我尝试保存组联合天和匹配。
Group.findById(groupId).exec(
function(err, group){
var match = new Match();
var day = group.days[dayNumber-1];
day.matches.push(
match
);
group.save(function(err){
console.log("success");
console.log("group in matches.js:"+group);
res.redirect("/tournaments/"+tournamentId+"/groups/"+groupId+"/days/"+dayNumber);
});
});
在重定向中,我再次打印“组”,匹配消失。
app.get('/tournaments/:tournamentId/groups/:groupId/days/:dayNumber', function (req, res) {
groupId = req.params.groupId;
dayNumber = req.params.dayNumber;
Group.findById(groupId, function (err, group) {
console.log("group in days.js:"+group);
res.render('days/show', {
title: 'Days',
group: group,
day:group.days[dayNumber-1],
tournamentId: req.params.tournamentId
});
});
});
控制台日志打印:
new match
success
group in matches.js:{ __v: 7,
_id: 53a3ee54dfe793bd9a20c6ab,
name: 'gruppo sdirubbo',
days: [ { matches: [Object], _id: 1 } ] }
GET /tournaments/539f0185ea17e46e73be937b/groups/53a3ee54dfe793bd9a20c6ab/days/1/newMatch 302 4ms - 208b
group in days.js:{ __v: 7,
_id: 53a3ee54dfe793bd9a20c6ab,
name: 'gruppo sdirubbo',
days: [ { matches: [], _id: 1 } ] }
最佳答案
mongoose.Schema.Types.Day
和 mongoose.Schema.Types.Match
未定义,因此引用它们的那些数组字段最终以 Mixed
类型,除非您明确标记它们已修改,否则它们不会保存。
您需要使这些模式在模型定义之间可用,然后在您的定义中使用它们。例如:
var matchSchema = new mongoose.Schema({
team1: {
type: Schema.ObjectId,
ref:'Team'
},
team2: {
type: Schema.ObjectId,
ref: 'Team'
},
score: [Number]
});
var daySchema = new mongoose.Schema({
_id: Number,
matches:[matchSchema]
});
var groupSchema = new mongoose.Schema({
name: String,
days:[daySchema],
});
关于node.js - Mongoose 不会将嵌套对象保存在另一个嵌套对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328057/