收藏
回答

云函数中使用事务怎么在记录中增加_openid字段?

云函数中使用事务,在提交的数据中增加_openid字段,但事务提交后_openid字段没有生成。同样的代码,不用事务就可以正常增加_openid字段。有开发者遇到类似问题吗?还有在事务中使用db.serverDate()会报错。

如下是云函数代码:

// 云函数入口函数

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,

      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,

   }

    

  } catch (e) {

    console.error(`transaction error`, e)

    return {

      success: false,

    }

  }

}


回答关注问题邀请回答
收藏

1 个回答

  • FWAN
    FWAN
    2020-02-29

    每条记录都有_id 字段用做记录唯一标志,_openid 字段用以标志记录的创建者,即小程序的用户,_openid是在文档创建时由系统根据小程序用户默认创建的,开发者可使用其来标识和定位文档,开发者可以自定义_id,但不可自定义和修改_openid 。

    2020-02-29
    有用
    回复 4
    • 黄雄
      黄雄
      2020-03-01
      关键问题是用云函数创建的记录不会自动添加_openid字段,需要在代码主动增加。


      在云函数中,如果不用事务,是可以正常用代码添加_openid字段的;但如果用了事务,记录能正常创建,但没有代码添加的_openid字段。


      事务正常执行完成了,但数据不完整(没有_openid字段),怎么解?这算不算是事务处理的严重bug?
      2020-03-01
      回复
    • 黄雄
      黄雄
      2020-03-01
      或者说云函数创建记录时不会自动添加_openid这是个bug?
      2020-03-01
      回复
    • FWAN
      FWAN
      2020-03-01回复黄雄
      这个应该是wx还没有开放权限吧
      2020-03-01
      回复
    • 李明洋
      李明洋
      2020-03-26
      我也是开发者工具调试的时候不会自动创建
      2020-03-26
      回复
登录 后发表内容
问题标签