小程序提供的事务必须在云函数端使用,但是在事务中无法将_openid写入到集合中去,并且使用db.serverDate()也是会报错的。
复现云函数代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
await db.collection('test3').add({
data: {
_openid: wxContext.OPENID,
createTime: db.serverDate(),
name: 'db add'
}
})
const transaction = await db.startTransaction()
await transaction.collection('test3').add({
data: {
_openid: wxContext.OPENID,
createTime: new Date(),
// createTime: db.serverDate(), //报错 invalid key in $date object: offset
name: 'transaction add'
}
})
await transaction.commit()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
这个问题也已经有人遇到了:
https://developers.weixin.qq.com/community/develop/doc/0002e4a8f20e38f0a7f9df9c555c00
https://developers.weixin.qq.com/community/develop/doc/00024a5662c38072cbf97ef4e51800
https://developers.weixin.qq.com/community/develop/doc/000eacacd64ae02f8fc9dc67250000
根据上面的回帖,我也试了下自定义安全规则,并将该集合的权限全部给true,然而还是同样问题。
{
"read": true,
"write": true
}
根据文档内容,事务必须在云函数端使用,如果不能写入_openid,使用其他字段来保存的话,后续的业务逻辑需要修改很多地方,希望尽快修复该问题,谢谢!
同样遇到db.serverDate()问题
我也遇到了同样的问题...