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

标签 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()在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/

相关文章:

node.js - 如何删除MongoDB集合中的TTL?

javascript - 如何将一个div附加到另一个div上

javascript - 使用 .split() 将字符串转换为数组(需要改进)

javascript - 我们如何为不同的请求类型编写 Joi 模式?

node.js - Mongoose:使用 Schema.Types.Mixed 动态创建键

javascript - 类型错误 : Cannot read property 'upvote' of undefined in mean stack

javascript - 记录不同的数组

javascript - 使用 JavaScript 从 Date 对象或日期字符串中获取工作日

javascript - 如何在node.js中从客户端接收POST表单数据

node.js - Node bcryptjs 不是确定性的?