小程序
小游戏
企业微信
微信支付
扫描小程序码分享
云函数端查询语句:
db.collection(collectionName).where(wherex).get()
这里wherex是前端传过来的参数
当需要用到db.command时应如何处理参数wherex
5 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我的处理方案供大家参考,
主要的思路是在云函数中重新将上传的参数解析成为命令查询,我仅写了简单的查询命令解析,对于带逻辑关系的因没有用到,所以没有写,这里提供一个思路:
本地和云函数的代码如下:
// 本地的查询条件 let condition ={ endDate:{ command:"gte", value:Date.now() }, _startDate:{ command:"gte", value:startDate //startDate这是一个变量 } } // 云端函数中的查询条件处理如下 let condition = event.condition let collectionname = event.collectionname //定义云函数的查询对象 let newcontion ={} //解析本地查询条件的函数 let getcommand = (key,item) => { switch(item.command){ case "no": newcontion[key] =item.value break; case "gte": newcontion[key] = _.gte(item.value) break; case "eq": newcontion[key]= _.eq(item.value) break; case "lt": newcontion[key] = _.lt(item.value) break; case "gt": newcontion[key] = _.gt(item.value) break; case "in": newcontion[key] = _.in(item.value) break; case "nin": newcontion[key] = _.nin(item.value) break; case "neq": newcontion[key] = _.neq(item.value) break; } }; // 解析传递过来的condition中的每个查询对象 for (let key in condition) { getcommand(key,condition[key]) } //查询语句 const countResult = await db.collection(collectionname).where(newcontion).count()
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
谢邀:
个人觉得楼主需要自定义一个参数结构
wherex:{ whereString:{ //这里写正常where }, command:{//这里写command, _or:["A=b","C=D" _and:[xxx,xxx] }
请问这个问题现在解决了吗,还是需要分成很多函数吗
我也想这么操作,请问你弄出来了吗?
我在本地这样是可以的,可以将条件封装,但是移到云函数,这样直接whereparams的写法就会说参数不对。
function updateRecord(tablename, whereparams, dataparams) {
db.collection(tablename).where(
whereparams
)
.update({
data: dataparams,
success: res => {
return true;
},
fail: err => {
return false;
}
})
不知道你想问啥,db.command和传过来的参数又没有关系
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我的处理方案供大家参考,
主要的思路是在云函数中重新将上传的参数解析成为命令查询,我仅写了简单的查询命令解析,对于带逻辑关系的因没有用到,所以没有写,这里提供一个思路:
本地和云函数的代码如下:
// 本地的查询条件 let condition ={ endDate:{ command:"gte", value:Date.now() }, _startDate:{ command:"gte", value:startDate //startDate这是一个变量 } } // 云端函数中的查询条件处理如下 let condition = event.condition let collectionname = event.collectionname //定义云函数的查询对象 let newcontion ={} //解析本地查询条件的函数 let getcommand = (key,item) => { switch(item.command){ case "no": newcontion[key] =item.value break; case "gte": newcontion[key] = _.gte(item.value) break; case "eq": newcontion[key]= _.eq(item.value) break; case "lt": newcontion[key] = _.lt(item.value) break; case "gt": newcontion[key] = _.gt(item.value) break; case "in": newcontion[key] = _.in(item.value) break; case "nin": newcontion[key] = _.nin(item.value) break; case "neq": newcontion[key] = _.neq(item.value) break; } }; // 解析传递过来的condition中的每个查询对象 for (let key in condition) { getcommand(key,condition[key]) } //查询语句 const countResult = await db.collection(collectionname).where(newcontion).count()
谢邀:
个人觉得楼主需要自定义一个参数结构
wherex:{ whereString:{ //这里写正常where }, command:{//这里写command, _or:["A=b","C=D" _and:[xxx,xxx] }
_or:["A=b","C=D"
_and:[xxx,xxx]
}
_or是对应云函数中的_.or吗?
请问这个问题现在解决了吗,还是需要分成很多函数吗
我也想这么操作,请问你弄出来了吗?
我在本地这样是可以的,可以将条件封装,但是移到云函数,这样直接whereparams的写法就会说参数不对。
function updateRecord(tablename, whereparams, dataparams) {
db.collection(tablename).where(
whereparams
)
.update({
data: dataparams,
success: res => {
return true;
},
fail: err => {
return false;
}
})
不知道你想问啥,db.command和传过来的参数又没有关系
在云函数端要写成:
const wherec = {username: db.command.neq('admin')}
let res = await db.collection(event.data.collectionName).where(wherec).get()
这里wherec我不想在云函数端写死,而希望在小程序端以参数形式传给云函数。
在查询的时候db.command总是要作用于where的条件,二者有很大的关系。
事实上,db.command应该是参数的一部分
在云函数端只用一条查询语句(只接收wherec一个参数,不用再对参数进行分支判断),通过改变参数的方法(或者其它方法),适配所有前端传过来的查询。