评论

【笔记】云开发用户记录存在更新,不存在新增

实现用户存在更新,不存在新增的三种方法

方案一 :如果这个表里只存userInfo的信息,将_id值设置为OPENID,直接使用set覆盖,最简单。
注意:这种方式会覆盖掉以前的数据,如果有部分其他数据,如注册时间、最后登录时间请使用后面的方式。
let userInfo = event.userInfo
if (!userInfo) {
    console.log('无用户信息,更新失败')
  }else{
  db.collection('user').doc(OPENID).set({
    data: userInfo
  }).then(e => {
    console.log('用户数据更新成功', e)
  })
}
方案二:如果用户表中存了其他字段,需要实现存在更新,不存在插入,可以先查询,再判断处理。
async function updateUser () {
  let chk = await db.collection('user').where({ _openid: OPENID }).get()
  if (chk.data.length) {
    // 存在记录,更新
    await db.collection('user').where({ _openid: OPENID }).update(userInfo)
  } else {
    // 不存在,新增
    await db.collection('user').add(userInfo)
  }
}

方案三:将_id直接设置为openid,然后利用查不到指定_id会报错的特性,在catch里填写更新语句,这样可以少执行一次查询操作。
let userInfo = event.userInfo
userInfo.lastTime = db.serverDate() //添加最后更新时间
db.collection('user').doc(OPENID).update({
  data: userInfo
}).catch(err => {
  //用户不存在会抛出异常,在异常中处理新增
  userInfo._id = OPENID //设置OPENID为_id
  userInfo.createTime = db.serverDate() //添加用户创建时间  
  db.collection('user').add({
    data: userInfo
  })
})
最后一次编辑于  2020-05-21  
点赞 4
收藏
评论

2 个评论

  • 小肥羊
    小肥羊
    2020-05-21

    谢谢,解决了我的问题。

    2020-05-21
    赞同 1
    回复
  • 卖萌小袋鼠
    卖萌小袋鼠
    2020-05-14

    谢谢!!!!!

    2020-05-14
    赞同
    回复
登录 后发表内容