[图片]
云函数事务新增记录中无法生成_openid字段1、云函数创建记录时不会自动增加_openid字段,需要在代码中主动增加 _openid字段。(这是不是个bug?) 2、当云函数创建记录时不使用事务,可以通过代码中主动增加 _openid 字段,在生成的记录中增加 _openid 字段 3、 但当云函数创建记录时启用事务时,事务可能执行完成,但数据不完整,缺少代码中主动增加的 _openid 字段 期望:事务中创建记录时能生成 _openid 字段。 复现代码如下: // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() const _ = db.command // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() try { const transaction = await db.startTransaction() // generate order record let trade_no = 'ABCD1234' let order = { _id: trade_no, _openid: wxContext.OPENID, // 创建的记录中无 _openid 字段 status: 0, create_date: new Date(), // create_date: db.serverDate(), // 报错:invalid key offset } await transaction.collection('test').add({ data: order }) await transaction.commit() console.log(`transaction1 succeeded`) return { success: true, state: 3, } } catch (e) { console.error(`transaction error`, e) return { success: false, error: e, } } }
2020-03-01问题解决了吗? 也遇到同样的问题了
用事务处理向数据库添加数据,无法添加_openid字段?因为涉及到更新两个相关联的表,所以要用到事务处理。先看代码: const transaction = await db.startTransaction() const res1 =await transaction.collection('orderEvaluate').add({ data: { orderID: event.orderID, // _openid: openid, //这里使用_openid作为字段名保存openid时,数据库中不会保存这个字段, openid:openid, //但是用openid作为字段名保存openid时,数据库中就正常保存了。 仅仅是一个下划线的区别,为什么结果不一样? publishDate: newDate(), productID: event.productID, grade: event.grade, content: event.content } }); const res2 =await transaction.collection('order').doc(event.orderID).update({ data: { status: 2 }, }) if(res1._id !=null && res2.stats.updated>){ await transaction.commit() return { success: true result_1: res1, result_2: res2 } }else await transaction.rollback() return { success: false result_1: res1, result_2: res2 } } 这里使用_openid作为字段名保存openid时,数据库中不会保存这个字段,但是用openid作为字段名保存openid时,数据库中就正常保存了。 仅仅是一个下划线的区别,为什么结果不一样?
2020-02-28