微信小程序开发-云数据库去除重复注册用户

文章讨论了在微信小程序中用户可能因重复提交注册信息导致数据库中出现多个相同OpenID账户的问题。提出了三种解决方案:一是在注册函数中检测用户是否存在;二是提交后立即跳转页面防止重复提交;三是定期清理重复注册用户。清理过程包括查询重复用户,存储要删除的_id,然后安全删除多余的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

可能是在提交注册信息时,重复提交了多次。设计时,提交注册页面在提交数据后没有立即跳转页面,于是用户可能多次点击提交,这时小程序还没有来得及检验数据库是否已存在该用户,造成一个用户的“_openid”注册出多个相同“_openid”的账户信息。

解决办法

一、

在注册提交函数里先检测是否存在该用户,已存在则用update更新函数,不存在,才用add新增函数。但是容易增加调用次数,提升成本。

二、

设计时,提交注册页面在提交数据后立即跳转到其它页面,只要不是用户故意,一般不存在多次重复提交了。但有的小程序对注册用户数量敏感的,需要统计用户数量的,或者已存在重复注册用户,需要清理,就要使用第3个方法。

三、

定期清理下重复注册用户。

1.查询所有重复注册用户

在小程序的云开发控制台,数据库栏里,“高级操作”里添加数据库查询语句,查询到存在那些重复注册用户,聚合数量大于1的都是。

db.collection('login_users')
  .aggregate()
  .group({
    _id: '$_openid',
    num: $.sum(1)
  })
  .match({
  num: _.gt(1)
  })
  .end()

在这里插入图片描述

2.查询这些重复用户的_id号

查询这些重复用户的_id号,存入缓存,以便删除,但每一个_openid用户都要留下一个记录,否则就全删除了,这个用户就要重新注册,影响用户体验。云开发控制台里不能暂存数据,于是在微信开发工具里新建了一个页面,专门来去除重复注册用户。

for(var i=0;i<this.data.multiUsers.length;i=i+1){
          // multiUsers就是第1步里查出的所有重复注册用户
        
        db.collection('login_users')
          .aggregate()
          .match({
            _openid: this.data.multiUsers[i]._id
          })
          .sort({
            _createTime: -1
          })
          .limit(this.data.multiUsers[i].num-1)
          //一定要num-1,不能全删除了
          .project({
            _id: 1,
            _openid: 1
          })
          .end()
          .then(res => {
            console.log('要删除的重名用户:', res.list)
            for(var n=0;n<res.list.length;n++){
            that.data.deleteUsers.push(res.list[n])}
            // 将要删除的_id,_openid存入数组deleteUsers

          }).catch(err => {
            console.log('云函数调用失败!', err)
          })
        }
3.删除重复用户的_id号
  for(var m=0;m<this.data.deleteUsers.length;m++){
    console.log('m:',m)
 
  db.collection('login_users')
  .where({
    _id:this.data.deleteUsers[m]._id,
    _openid:this.data.deleteUsers[m]._openid
  })
  .remove()

我再这里建了一个按钮,点击按钮才会删除数据,点击之前通过Console查看前面的数据是否有误,无误后再删除,避免删错。真删错了,记住操作时间,可以数据库回档。最好是在小程序暂停服务时,进行删除操作。
在这里插入图片描述
点击下面链接,可以下载上述完整代码:
云数据库去除重复注册用户JavaScript代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Maker 张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值