微信小程序云开发问题篇4_微信云数据库记录内嵌数组查询( 根据数组对象的key 查询一条记录中 符合条件的 {key :xxx, value: xxx}对象,然后将该对象返回)
一、需求rubbish_list 是一个集合,里面有一个文档(内含4000多条对象{name : xxx ,kind : xxx},现在需要从这个文档 中根据 name 获得对应的kind,而且需要 遍历 names 这个数组多次调用云函数二、问题描述-如何查询内嵌数据一般简单的查询就是 回去 单一的一条记录,这次需求是 查询一条记录的 符合条件的 数组对象,然后将该对象返回可以参考:https:
·
一、需求
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
})
})
}
})
更多推荐
已为社区贡献8条内容
所有评论(0)