uni-app .inc自增运算符报错数据库验证失败 ["adBalance"]类型无效
uni-app .inc自增运算符报错数据库验证失败 [“adBalance”]类型无效
产品分类
uniCloud/App
示例代码
// mpUser.schema.json
"adBalance": {
"description": "剩余广告次数余额",
"bsonType": "int"
},
// 云对象
async addAdBalance() {
let { _id, openid, otherid, num } = this.params
const dbCmd = db.command
const res = await dbJQL.collection('mpUser')
.where({ _id: _id, openid: openid, otherid: otherid })
.update({ adBalance: dbCmd.inc(1) })
return getResult({
data: res
})
},
// 调用
const uniMpCloud = uniCloud.importObject('uni-mp', { customUI: true })
uniMpCloud.addAdBalance({
openid: userInfo.value.openid,
num: 1
}).then(res2 => {
console.log(res2);
})
操作步骤
调用就复现
预期结果
正常自增
实际结果
报错
bug描述
折腾了三个小时,实在搞不定了
一直报错code: “VALIDATION_ERROR”
message: “数据库验证失败:[“adBalance”]类型无效”
// 单独写了个云函数就能正常自增 为何云对象不行?
‘use strict’;
const db = uniCloud.database()
const dbCmd = db.command
exports.main = async (event, context) => {
let { _id, openid, otherid, num } = event.queryStringParameters
let res = await db.collection(‘mpUser’)
.where({ _id: _id, openid: openid, otherid: otherid })
.update({ adBalance: dbCmd.inc(parseInt(num)) })
return res
};
完整的schema发一下
在处理uni-app中的.inc
自增运算符报错,特别是涉及到数据库验证失败以及字段类型无效的问题时,通常我们需要确保几个关键点:
-
数据库字段类型:确保你的数据库中
adBalance
字段支持数值运算。例如,在MongoDB中,这通常意味着字段应该是数值类型(int或float)。 -
数据库操作代码:检查uni-app中执行自增操作的代码,确保使用了正确的语法和API。
-
字段存在性:在执行自增前,确保该字段已经存在于文档中,或者你的操作逻辑能够处理字段不存在的情况。
以下是一个基于uni-app和MongoDB(假设你使用的是uniCloud的数据库服务)的示例代码,展示如何正确执行自增操作:
// 引入uniCloud的数据库API
const db = uniCloud.database();
const collection = db.collection('your_collection_name');
// 假设我们要更新某个用户的adBalance
async function updateAdBalance(userId, incrementValue) {
try {
await collection.doc(userId).update({
data: {
adBalance: db.command.inc(incrementValue)
}
});
console.log('Ad balance updated successfully.');
} catch (error) {
if (error.code === 11000) {
// 字段类型错误等数据库验证失败的情况
console.error('Database validation error:', error.message);
} else {
console.error('Update failed:', error);
}
}
}
// 调用函数,增加用户的adBalance
updateAdBalance('user_id_here', 10);
注意事项:
db.command.inc
是MongoDB的更新操作符,用于自增字段值。userId
应该是你要更新的文档的唯一标识符。incrementValue
是你要增加的值。- 错误处理中,我们检查了错误代码
11000
(这只是一个示例,MongoDB的具体错误代码可能有所不同),你可以根据实际的错误代码进行更细致的错误处理。 - 确保你的数据库集合(
your_collection_name
)和字段(adBalance
)已经正确设置,并且adBalance
字段是数值类型。
如果错误持续存在,可能需要检查更详细的数据库日志,或确认数据库连接和配置是否正确。此外,如果使用的是其他类型的数据库(如MySQL、PostgreSQL等),自增操作的语法将有所不同,需要调整相应的数据库操作代码。