我目前正在使用 mongoose 和 node.js。
我正在使用这些架构(针对此问题进行了缩写):
var gameSchema = new Schema({
gameId: { type: Number },
rounds: [Round.schema]
});
var roundSchema = new Schema({
roundId : { type: Number },
lines: [Line.schema]
}, { _id : false });
var lineSchema = new Schema({
lineId: { type: Number }
plays: [ Play.schema ]
}, { _id : false });
var playSchema = new Schema({
category: { type: String },
score: { type: Number }
}, { _id : false });
我首先通过findOne()在rounds数组中获取一个回合的游戏,然后改变一些属性并将具有多次播放的线插入该回合。当我尝试做一个
game.save(function(err) {
console.log("it's doing the save");
if(!err) {
console.log('ok');
} else {
console.log('ERROR: ' + err);
}
});
服务器只是挂起并且不执行任何操作,没有任何控制台消息打印出来。查看 Mongoose 日志,我找不到任何错误消息或一些对我有帮助的日志。
奇怪的是,如果我用空的 [] 替换plays 数组,保存就会按预期进行。
这是我尝试保存的游戏文档的示例:
{ __v: 1,
_id: 53d427c43ff7f8bc1b9aa3b6,
gameId: 1,
rounds: [
{ roundId: 1,
lines: [
{ lineId: 1,
plays: [
{ score: 10,
category: 'COLORES'
},
{ score: 10,
category: 'ANIMALES'
}
]
}
]
}
]
}
有什么想法吗?
谢谢!
最佳答案
经过日复一日的头撞墙之后,我终于明白了我的问题是什么。
我的“PlaySchema”有一个方法定义,该方法称为验证。
PlaySchema.method.validate
该方法阻止我的 Play 被保存到数据库中。 一旦我将该方法名称更改为“validate”之外的其他名称,它就工作得很好。 看来 mongo 将“validate”视为保留字。
关于javascript - 从 node.js 调用时,mongoose .save() 会挂起 3 级子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24976060/