方案一 :如果这个表里只存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
userInfo.createTime = db.serverDate()
db.collection('user').add({
data: userInfo
})
})
谢谢,解决了我的问题。
谢谢!!!!!