【笔记】云开发用户记录存在更新,不存在新增
方案一 :如果这个表里只存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
})
})