一、需求

rubbish_list 是一个集合,里面有一个文档(内含4000多条对象{name : xxx ,kind : xxx},现在需要从这个文档 中

根据 name 获得对应的kind,而且需要 遍历 names 这个数组多次调用云函数

二、问题描述-如何查询内嵌数据

一般简单的查询就是 回去 单一的一条记录,这次需求是 查询一条记录的 符合条件的 数组对象,然后将该对象返回

可以参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query-array-object.html

分析

  • 对于 多个name,可以多次调用云函数来查询
  • 每个name,都对应一个res,res包含 {name:xxx,kind : xxx}
  • 关键是怎么写查询条件
尝试解决1
  • 根据name查kind的云函数

    return db.collection('rubbish_list').where({
        data: [
        	{
          		name: event.word_name
        	}
        ]
    
      }).get()
    
  • 然后遍历names,循环调用云函数
    在这里插入图片描述

结果发现不行…

在这里插入图片描述

尝试解决2

云函数换成

return db.collection('rubbish_list').where({
    data: {
      name: event.word_name
    }
    

  }).get()

发现还是不行…在尝试

在这里插入图片描述

还是不行,这次使用·“data.name:word_anme”· 把整个记录查出来了,果然查询都是以一个记录为单位的…

三、问题解决

一个记录,干脆直接将全部的数据获取,然后data中查找name

这样估计速度会有点慢,直接简单粗暴

return db.collection('rubbish_list').doc("97fb694660a494ee00e6dc585aa7c014"
  ).get()

完整图像识别、数据渲染、根据垃圾name查询kind 的逻辑代码

wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
        wx.showLoading({
          title: '上传检索中',
        })
        // 1. 暂时文件地址
        const tempFilePaths = res.tempFilePaths;
        console.log(tempFilePaths)
        // 2. base64格式
        wx.getFileSystemManager().readFile({
          filePath: res.tempFilePaths[0],
          encoding: "base64",
          success: function (data) {
            console.log(data.data)
            wx.setStorageSync('img_base', data.data)
          }
        })
        // 3. 照片后缀,用于上传云存储,暂时不用
        var arr = tempFilePaths[0].split(".")

        // 4. 获取token
        utils.getAccessToken().then(res => {
          console.log(res)

          // 5. 访问接口
          utils.askApiUrl(wx.getStorageSync('img_base')).then(res => {
            console.log(res)
            // 6. 数据渲染 ,根据名字查询垃圾的类
            wx.hideLoading()
            if (res.data.result.advanced_general.result) {
              if (res.data.result.advanced_general.result.length > 0) {
                that.setData({
                  is_show: true,
                  detail: res.data.result.advanced_general.result,
                  seah_name: ''
                })

                // 7. 根据名字查垃圾的类别


                // 0. 取出来key存储到words

                var words = new Array()
                res.data.result.advanced_general.result.forEach((item, index, array) => {
                  words.push(item.keyword)

                })

                // 1. kinds数组存储结果

                var kinds = new Array()

                // 2. 云函数查询整个记录

                // 有缓存
                if (wx.getStorageSync('rubbish_list_cache')) {
                  var rubbish_list_cache = wx.getStorageSync('rubbish_list_cache')
                  for (var i = 0; i < words.length; i++) {
                    // 是否找到分类
                    var flag = false
                    //console.log(words[i])
                    rubbish_list_cache.forEach((item, index, array) => {
                      //执行代码
                      if (item.name == words[i]) {

                        kinds.push(item.kind)

                        flag = true
                      }
                    })
                    if (flag == false) {
                      kinds.push("待更新分类...")
                    }
                  }

                  that.setData({

                    seah_name: kinds
                  })

                }
                //无缓存
                else {


                  wx.cloud.callFunction({
                    name: "getGroupByWord",

                  }).then(res => {
                    console.log(res)

                    if (res.result.data.data.length != 0) {
                      wx.setStorageSync('rubbish_list_cache', res.result.data.data)
                      console.log(wx.getStorageSync('rubbish_list_cache'))
                      for (i = 0; i < words.length; i++) {
                        // 是否找到分类
                        var flag = false
                        //console.log(words[i])
                        res.result.data.data.forEach((item, index, array) => {
                          //执行代码
                          if (item.name == words[i]) {
                            kinds.push(item.kind)
                            flag = true
                          }
                        })
                        if (flag == false) {
                          kinds.push("待更新分类...")
                        }
                      }
                      console.log(kinds)

                      that.setData({

                        seah_name: kinds
                      })






                    }


                  }).catch(err => {
                    console.log(err)
                    wx.showToast({
                      title: '网络错误~',
                      icon: 'none',
                      duration: 2000
                    })
                  })
                }


                console.log(words)
                console.log(kinds)


              } else {
                wx.showToast({
                  title: '如此聪明伶俐的我居然会词穷~',
                  icon: 'none',
                  duration: 2000
                })
              }
            } else {
              wx.showToast({
                title: '如此聪明伶俐的我居然会词穷~',
                icon: 'none',
                duration: 2000
              })
            }

          }).catch(err => {
            console.log(err)



            wx.showToast({
              title: '网络出错~',
              icon: 'none',
              duration: 2000
            })
          })

        }).catch(err => {

          console.log(err)

          wx.showToast({
            title: '网络出错~',
            icon: 'none',
            duration: 2000
          })
        })


      }
    })
  
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐