html52.com
我爱小程序-开发者交流社区

watch的 onChange返回的docs丢掉了where子句

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 微信安卓客户端 wx9228b752135ef593 1 1

按照文档规范(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.watch.html):

snapshot.docs"表示此更新事件发生后查询语句对应的查询结果"

而实际情况是,docs返回了所有的记录,没有关联where子句,不符合“查询语句

当前查询语句是:

当前查询语句是:查询结果是7条

查询结果是7条

查询结果是7条更新后,返回的snapshot:

更新后,返回的snapshot:

查询语句没变:

返回的结果,docChanges显示有一条更新,但docs变成了所有记录,把查询语句where条件丢掉了:

调用语句如下:

调用语句如下:8-14 又发现数据更新后orderby不能刷新


8-14 又发现数据更新后orderby不能刷新

网友回复

子杰:

watch 不支持在查询条件里加上正则匹配的。

这里有bug,应该在watch初始化的时候,就报错“不支持正则” 的,这里后续会完善。

鲁愚:
//针对watcher不支持模糊检索,对change数据分别处理
.watch({
        onChangefunction(snapshot{
          //初始化时type=init
          if (snapshot.type){
            that.setData({
              list: snapshot.docs, 
            });
          }
          //更新时
          else{
            let tmpBackList = that.data.list.slice(0);
            
            forvar i = 0; i < snapshot.docChanges.length; ++i ){
              var docChange= snapshot.docChanges[i]
              var doc =docChange.doc;
              const index = tmpBackList.findIndex(item => item._id === doc._id);
              const search=doc.toDo.title.indexOf(that.data.searchStr)  //校验搜索条件    
              switch ( docChange.dataType ) {
                //记录进入列表
                case "add":
                  
                  //校验搜索条件
                  if (  search >=0  && index < 0 ){  //6-15出现重复数据 汉字多次watch,所以增加index校验
                    tmpBackList.push(doc);
                    
                  }
                  break;
                 case "replace":
                      if (index >= 0 && search >=0){ //更新
                      tmpBackList.splice(index,1,doc);  
                    }else if(index < 0 && search >=0 ){          //更新的新增
                      tmpBackList.push(doc);
                    }else if(index >= 0 && search < 0 ){          //更新的去除
                      tmpBackList.splice(index,1);
                    }
                    break;
                case "update":
                    if (index >= 0 && search >=0){ //更新
                      tmpBackList.splice(index,1,doc);  
                    }else if(index < 0 && search >=0 ){          //更新的新增
                      tmpBackList.push(doc);
                    }else if(index >= 0 && search < 0 ){          //更新的去除
                      tmpBackList.splice(index,1);
                    }
                  break;
                //记录离开列表  
                case "remove":
                  if (index>= 0){
                    tmpBackList.splice(index,1);
                    
                  }
                  break;
                //列表中的记录内容有更新,但列表包含的记录不变
                default:
                  console.log("toDay.watcher.onChange.default",doc);
              }
              
            }
                        //更新列表
                        that.setData({
              list: tmpBackList, 
            });
          }

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付