gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:09:06 24 4
gpt4 key购买 nike

我目前正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com