收藏
回答

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

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

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

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

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    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()


    11-07
    赞同 1
    回复 1
    • ieloag
      ieloag
      11-07
      非常感谢
      11-07
      回复
  • ieloag
    ieloag
    11-06

    大佬们帮帮我

    11-06
    赞同
    回复
  • 🧐
    🧐
    11-06

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

    11-06
    赞同
    回复 5
问题标签