收藏
回答

请问如果实现多条件云函数查询数据库?

我想先查询用户的openid然后再跨字段进行 "或" 操作,所以我用了.where().where()的方式,但是感觉很不规范,请问如何才能优化只有一个where()呢?

let w = [],
      id = {}
    if (keyword.trim() != '') {
      w = [{
          ar: db.RegExp({
            regexp: keyword,
            options: 'i'
          })
        },
        {
          name: db.RegExp({
            regexp: keyword,
            options: 'i'
          })
        }
      ]
    }
    id = {
      _openid: wxContext.OPENID
    }
    //先获取openid 然后再进行条件搜索,条件搜索数组不能为空,所以进行了一个判断
    if (w.length != 0) {
      ctx.body = await cloud.database().collection('collectMusiclist').where(id).where(_.or(w)).skip(event.start).limit(event.count)
        .orderBy('createTime', 'desc')
        .get().then(res => {
          return res
        })
    } else {
      ctx.body = await cloud.database().collection('collectMusiclist').where({
          _openid: wxContext.OPENID
        }).skip(event.start).limit(event.count)
        .orderBy('createTime', 'desc')
        .get().then(res => {
          return res
        })
    }

新手一枚,想请各位大佬解答一下

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

2 个回答

  • -random
    -random
    11-23
    const _ = db.command
    let re = new RegExp(event.word, "i")
    let data = await db.collection('user').where(
            _.or([{
                openId: re
            }, {
                'userInfo.nickName': re
            }])
        )
        .get()


    11-23
    赞同
    回复 1
    • Mr.Adonis
      Mr.Adonis
      11-23
      兄弟你这个意思不是查询openid或者'userInfo.nickName'吗。。。
      11-23
      回复
  • 郑旭东
    郑旭东
    11-23

    db.RegExp 不能用在command里面,只能单独使用,所以你这里把w的两个条件拆开来,数据库查两次,这样都写在where里就可以了吧。

    第一次查询:

    where({
     _openid: wContent.OPENID,
    ar: db.RegExp({
                regexp: keyword,
                options: 'i'
              })
    })


    第二次查询:

    where({
     _openid: wContent.OPENID,
    name: db.RegExp({
                regexp: keyword,
                options: 'i'
              })
    })


    再自己把两个查询得到的数组拼接起来。

    可以看下我之前的帖子参考:

    https://developers.weixin.qq.com/community/develop/doc/000ca2cfee0c387c9069e27c95b400

    11-23
    赞同
    回复 1
    • Mr.Adonis
      Mr.Adonis
      11-23
      受教了,谢谢
      11-23
      回复
问题标签