收藏
回答

云开发 数据库可以 动态拼接 查询指令吗?

因为mysql的查询指令是字符串..所以可以动态拼接.例如.如果数组 a.length!=0 就添加条件,..等于0则不添加

云开发 数据库可以 动态拼接 查询指令吗?

最后一次编辑于  2019-11-06
回答关注问题邀请回答
收藏

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-11-07

    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()


    2019-11-07
    有用 2
    回复 3
    • ieloag
      ieloag
      2019-11-07
      非常感谢
      2019-11-07
      回复
    • 卡普
      卡普
      2020-11-27
      大佬,
      // 比如 type = 1 并且 state > 2 => $.and([ 条件1表达式, 条件2表达式 ])    ,条件1表达式如果是模糊查询,应该怎么写?我试着用keyword: db.RegExp({
                  regexp: searchKeyword,
                  options: 'i',
                })
      会报错。。。
      2020-11-27
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-12-03回复卡普
      报什么错
      2020-12-03
      回复
  • ieloag
    ieloag
    2019-11-06

    大佬们帮帮我

    2019-11-06
    有用
    回复 1
    • 老龙
      老龙
      发表于移动端
      2020-07-17
      ∨\
      2020-07-17
      回复
  • uly
    uly
    2019-11-06

    查询条件一样可以动态生成的

    2019-11-06
    有用
    回复 5
登录 后发表内容
问题标签