当从node.js调用时,mongoose .save()挂起3级子文档

时间:2014-07-26 22:22:10

标签: javascript node.js mongoose

我目前正在使用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()在圆形阵列中获得一个圆形游戏,然后改变一些属性并将具有多个游戏的线条推向该轮。当我尝试做一个

game.save(function(err) {
            console.log("it's doing the save");
            if(!err) {
              console.log('ok');
            } else {
              console.log('ERROR: ' + err);
            }
          });

服务器只是挂起并且什么都不做,没有打印出任何控制台消息。看着猫鼬日志,我找不到任何错误信息或一些帮助我的日志。

奇怪的是,如果我用空的[]替换plays数组,则保存按预期工作。

以下是我要保存的游戏文档示例:

{ __v: 1,
  _id: 53d427c43ff7f8bc1b9aa3b6,
  gameId: 1,
  rounds: [ 
   { roundId: 1,
     lines: [
       { lineId: 1,
         plays: [ 
          { score: 10,
            category: 'COLORES'
          },
          { score: 10,
            category: 'ANIMALES'
          } 
         ] 
       }
     ] 
   } 
 ] 
}

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

经过几天和几天撞到墙上,我想到了我的问题。

我的“PlaySchema”有一个方法定义,该方法称为验证

PlaySchema.method.validate

该方法是阻止我的Play保存到数据库中的方法。 一旦我将该方法名称更改为“验证”以外的其他名称,它就可以正常工作。 似乎mongo将“验证”视为一个保留词。