uni-app .inc自增运算符报错数据库验证失败 ["adBalance"]类型无效

发布于 1周前 作者 h691938207 来自 Uni-App

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”]类型无效”


3 回复

// 单独写了个云函数就能正常自增 为何云对象不行?
‘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自增运算符报错,特别是涉及到数据库验证失败以及字段类型无效的问题时,通常我们需要确保几个关键点:

  1. 数据库字段类型:确保你的数据库中adBalance字段支持数值运算。例如,在MongoDB中,这通常意味着字段应该是数值类型(int或float)。

  2. 数据库操作代码:检查uni-app中执行自增操作的代码,确保使用了正确的语法和API。

  3. 字段存在性:在执行自增前,确保该字段已经存在于文档中,或者你的操作逻辑能够处理字段不存在的情况。

以下是一个基于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等),自增操作的语法将有所不同,需要调整相应的数据库操作代码。

回到顶部