gpt4 book ai didi

node.js - Mongoose:类型错误:doc.validate 不是函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:20 25 4
gpt4 key购买 nike

场景

我有一个 Mongoose 模型架构,如下所示:

var TerminalBalanceSchema = new mongoose.Schema({
currentBalances: [{
terminalID: {
type: String,
// required: '{path} is required'
},
balance: {
terminal: {
type: Number,
required: '{path} is required'
},
calculated: {
type: Number,
required: '{path} is required'
}
},
lastInquiryDate: Date
}]
});

其中currentBalances是一个对象数组。

基于上述架构的 mongoose 模型 TerminalBalance 的集合始终包含一个单个对象,其中只有 currentBalances 数组中的项目可能会更改。

问题

每当我执行某些操作来替换文档数组currentBalances中的对象并最终保存同一文档时,我都会收到以下错误:

x:\node\mynps-tcp-server\node_modules\mongoose\lib\schema\documentarray.js:104
doc.validate({ __noPromise: true }, function(err) {
^

TypeError: doc.validate is not a function

at x:\node\mynps-tcp-server\node_modules\mongoose\lib\schema\documentarray.js:104:11
at DocumentArray.SchemaType.doValidate (x:\node\mynps-tcp-server\node_modules\mongoose\lib\schematype.js:654:22)
at DocumentArray.doValidate (x:\node\mynps-tcp-server\node_modules\mongoose\lib\schema\documentarray.js:77:35)
at x:\node\mynps-tcp-server\node_modules\mongoose\lib\document.js:1171:9
at nextTickCallbackWith0Args (node.js:452:9)
at process._tickCallback (node.js:381:13)

请注意,要替换对象,我会循环遍历 currentBalances 数组,如果该对象与我要查找的对象相同,则会替换它:

for (var i = 0; i < terminalBalance.currentBalances.length; i++) {
if(terminalBalance.currentBalances[i].terminalID === response.data.terminalID){
terminalBalance.currentBalances[i] = balance;
terminalBalance.save(function (err) {
console.log('err', err); // this `err` is never thrown, that is the above error is thrown before reaching here
});
break;
} else { ...

Mongoose version: 4.4.19

最佳答案

使用 MongooseArray.splice 解决了我的问题(这是内置 JS Array.prototype.splice() 的包装器)在数组上,而不是直接将索引处的对象分配给 currentBalances 数组。

...
if(terminalBalance.currentBalances[i].terminalID === response.data.terminalID){
terminalBalance.currentBalances[i].splice(i, 1, balance); //<=== here
terminalBalance.save(function (err) {
console.log('err', err);
});
break;
...

关于node.js - Mongoose:类型错误:doc.validate 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37584510/

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