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,
}
}
}
这个问题官方在文档里写得很清楚了,_openid是每个用户的独特标识,云函数相当于后台,后台是哪个用户呢?所以云函数创建文档时不会添加_openid
楼主解决了吗 我也遇到了这个问题 小程序端新增有_openid,云函数端新增就没有
云函数相当于管理员,管理员的_openid是什么呢?