小程序
小游戏
企业微信
微信支付
扫描小程序码分享
因为mysql的查询指令是字符串..所以可以动态拼接.例如.如果数组 a.length!=0 就添加条件,..等于0则不添加
云开发 数据库可以 动态拼接 查询指令吗?
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/command.expr.html
var _ = db.command, $ = _.aggregate
var res = await db.collection('table2').where(_.expr(
// 聚合表达式写在这里
)).get()
下面举几个聚合表达式的栗子:
且条件 就用 $.and([ 条件1表达式, 条件2表达式, ..., 条件n表达式 ]),各表达式间是并且的关系
或条件 就用 $or([ 条件1表达式, 条件2表达式, ..., 条件n表达式 ]),各表达式间是或者的关系
// 比如 uid = 1
$.eq(['$uid', 1])
// 比如 type = 1 并且 state > 2 => $.and([ 条件1表达式, 条件2表达式 ])
$.and([ $.eq(['$type', 1]), $.gt(['$state', 2]) ])
// 比如 type = 1 并且 (state > 2 或者 num != 0)
// $.and([ 条件1表达式, $.or([ 条件2表达式, 条件3表达式 ]) ])
$.and([ $.eq(['$type', 1]), $.or([ $.eq(['$state', 30]), $.neq(['$num', 0]) ]) ])
// 比如 oid 在 [10,20,30] 中 并且 aid 不在 [100,200] 中
$.and([ $.in(['$oid', [10, 20, 30]]), $.not($.in([ '$aid', [100, 200] ])) ])
你说到动态添加条件,也不是不可以
以where为例,where的基本结构是 function where(rule: object): Query
它的参数是一个json对象
所有你可以先构建这个json对象
var a = [], b = 0, // a,b可以是外部传入的数据,这里为了方便,写死
wh = { uid: 1 } // 假设有个默认条件,uid=1
if (a.length <= 0) {
wh.type = 1
}
if (b == 0) {
wh.bind = '$aid' // 这里条件bind等于记录里的aid的值
// 最终 wh = {uid:1,type:1,bind:'$aid'}
db.collection(...).where(wh).get()
// ========================================
where里使用_expr也一样可以动态添加条件,道理同上面所说的where思路一样
如:同上,默认条件为uid=1,当a.length <= 0时,多加type=1的条件
b为0时,多加bind=aid字段值的条件
var ands = [$.eq(['$uid', 1])]
ands.push($.eq(['$type', 1]))
ands.push($.eq(['$bind', '$aid']))
db.collection(...).where(_.expr(
$.and(ands)
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
大佬们帮帮我
查询条件一样可以动态生成的
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/command.expr.html
var _ = db.command, $ = _.aggregate
var res = await db.collection('table2').where(_.expr(
// 聚合表达式写在这里
)).get()
下面举几个聚合表达式的栗子:
且条件 就用 $.and([ 条件1表达式, 条件2表达式, ..., 条件n表达式 ]),各表达式间是并且的关系
或条件 就用 $or([ 条件1表达式, 条件2表达式, ..., 条件n表达式 ]),各表达式间是或者的关系
// 比如 uid = 1
$.eq(['$uid', 1])
// 比如 type = 1 并且 state > 2 => $.and([ 条件1表达式, 条件2表达式 ])
$.and([ $.eq(['$type', 1]), $.gt(['$state', 2]) ])
// 比如 type = 1 并且 (state > 2 或者 num != 0)
// $.and([ 条件1表达式, $.or([ 条件2表达式, 条件3表达式 ]) ])
$.and([ $.eq(['$type', 1]), $.or([ $.eq(['$state', 30]), $.neq(['$num', 0]) ]) ])
// 比如 oid 在 [10,20,30] 中 并且 aid 不在 [100,200] 中
$.and([ $.in(['$oid', [10, 20, 30]]), $.not($.in([ '$aid', [100, 200] ])) ])
你说到动态添加条件,也不是不可以
以where为例,where的基本结构是 function where(rule: object): Query
它的参数是一个json对象
所有你可以先构建这个json对象
var a = [], b = 0, // a,b可以是外部传入的数据,这里为了方便,写死
wh = { uid: 1 } // 假设有个默认条件,uid=1
if (a.length <= 0) {
wh.type = 1
}
if (b == 0) {
wh.bind = '$aid' // 这里条件bind等于记录里的aid的值
}
// 最终 wh = {uid:1,type:1,bind:'$aid'}
db.collection(...).where(wh).get()
// ========================================
where里使用_expr也一样可以动态添加条件,道理同上面所说的where思路一样
如:同上,默认条件为uid=1,当a.length <= 0时,多加type=1的条件
b为0时,多加bind=aid字段值的条件
var ands = [$.eq(['$uid', 1])]
if (a.length <= 0) {
ands.push($.eq(['$type', 1]))
}
if (b == 0) {
ands.push($.eq(['$bind', '$aid']))
}
db.collection(...).where(_.expr(
$.and(ands)
)).get()
// 比如 type = 1 并且 state > 2 => $.and([ 条件1表达式, 条件2表达式 ]) ,条件1表达式如果是模糊查询,应该怎么写?我试着用keyword: db.RegExp({
regexp: searchKeyword,
options: 'i',
})
会报错。。。
大佬们帮帮我
查询条件一样可以动态生成的