收藏
回答

使用云函数更新数据库,调用时参数赋值_.inc()无效果

框架类型 问题类型 终端类型 AppID 基础库版本
小程序 需求 客户端 wxb7e5ee0e29f73b36 1.02.1904090

使用云函数来无视权限更新数据库,将数据库中score1的值自增,但是使用db.command.inc()无效


云函数如下:


// runDB云函数入口文件

const cloud = require('wx-server-sdk')


cloud.init()

const db = cloud.database()

const _ = db.command


// 云函数入口函数

exports.main = async (event, context) => {

const targetDB = db.collection(event.db)

try {

if (event.type == "insert") {

return await targetDB.add({

data: event.data

})

}


if (event.type == "update") {

return await targetDB.doc(event.indexKey).update({

data: event.data

})

}


if (event.type == "delete") {

return await targetDB.where(event.condition).remove()

}


if (event.type == "get") {

return await targetDB.where(event.condition)

.skip(20 * event.skip)

.limit(event.limit)

.get()

}

} catch (e) {

console.error(e)

}

}


函数调用如下


wx.cloud.callFunction({

name: 'runDB',

data: {

type: "update", //指定操作是update

db: "vote_counter", //指定操作的数据表

indexKye: "a5bb3551-c57a-4eda-97d6-6b6df24aa48f",//制定操作的数据记录

data: { //指定update的数据

score1: _.inc(1)

}

},

success: res => {

console.log('[云函数] [updatetDB2] 已修改Subjcts信息' )

},

fail: err => {

console.error('[云函数] [updatetDB2] 修改Subject失败', err)

}

})


如果把参数改成:  score:具体数值  的形式,数据库中的score1会改变值,但是如上述所示参数运行却不会


日志内容:

日志内容 Request ID: a78ac08b-6d7f-11e9-8491-525400e8849e

执行时间: 45.56ms内存使用: 272.00 KB

返回结果

null

日志

START RequestId: a78ac08b-6d7f-11e9-8491-525400e8849e

Event RequestId: a78ac08b-6d7f-11e9-8491-525400e8849e


2019-05-03T08:44:25.122Z  { Error: errCode: -502001 database request fail | errMsg: [FailedOperation.Insert] multiple write errors: [{write errors: [{Cannot create field 'operands' in element {score1: 1.0}}]}, {<nil>}];

at new CloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:6166:28)

at Object.returnAsCloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:6218:16)

at Object.checkError (/var/user/node_modules/wx-server-sdk/index.js:1484:23)

at DocumentReference.<anonymous> (/var/user/node_modules/wx-server-sdk/index.js:1417:41)

at step (/var/user/node_modules/tslib/tslib.js:133:27)

at Object.next (/var/user/node_modules/tslib/tslib.js:114:57)

at fulfilled (/var/user/node_modules/tslib/tslib.js:104:62)

at <anonymous>

at process._tickCallback (internal/process/next_tick.js:188:7)

errCode: -502001,

errMsg: '[FailedOperation.Insert] multiple write errors: [{write errors: [{Cannot create field \'operands\' in element {score1: 1.0}}]}, {<nil>}]; ' }

最后一次编辑于  2019-05-03
回答关注问题邀请回答
收藏

2 个回答

  • 小灰晖
    小灰晖
    2020-08-07

    小程序里的 _ 指的是小程序的 wx.cloud.database().command,和云函数的不是同一个 database().command

    2020-08-07
    有用
    回复
  • kindear
    kindear
    2019-05-03

    如果可以的话,你可以尝试在云函数初始化的时候加上这么一句试试

    cloud.init({
      env: '你的云环境id'
    })


    2019-05-03
    有用
    回复 1
    • 2019-05-03

      解决了,我直接在云函数里添加了

      if (event.type == "1") {

      return db.collection('vote_counter').doc('a5bb3551-c57a-4eda-97d6-6b6df24aa48f').update({

      data: {

      score1: _.inc(1)

      }

      })


      这样的独立字段,虽然麻烦但是还是很简单的

      2019-05-03
      1
      回复
登录 后发表内容