收藏
回答

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条

更新后,返回的snapshot:

查询语句没变:

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

调用语句如下:


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

最后一次编辑于  2020-08-14
回答关注问题邀请回答
收藏

2 个回答

  • 子杰
    子杰
    2020-06-10

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

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

    2020-06-10
    有用 1
    回复
  • 鲁愚
    鲁愚
    2020-06-10
    //针对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, 
                });
              }
    
    2020-06-10
    有用
    回复
登录 后发表内容
问题标签