收藏
回答

如何使用数据库聚合match过滤$.and

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 Bug 客户端 wxe4d5f1bebd6ec077 2.7.7

我需要在云函数中查询数据库,聚合计算一个人的某月1-31号的消费金额:

let queryFeeSum = await db
  .collection('lunch')
  .aggregate()
  .match({
    eno: eno,
    date: $.and([$.gte(['$date', dateNumRange.begin]), $.lte(['$date', dateNumRange.end])])
  })
  .group({
    _id: null,
    fee: $.sum('$goodsPrice')
  })
  .end()

date是数值型:它的值是8位整数,如20190701、20190728

上面的 $.and 语句按文档中的写法,聚合这个功能也是官方开发出来不久,找不到相关帮助文档。

运行报错,查看日志提示:

{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"errCode: -502001 database request fail | errMsg: [FailedOperation] (BadValue) unknown operator: $and; "}

请问一下,为什么提示操作失败,无效的值、未知的操作器$and。


回答关注问题邀请回答
收藏

3 个回答

  • Starkwang
    Starkwang
    2019-07-29

    match中应该传入一个query,示例代码中的这个不是一个合法的query

    {
        eno: eno,
        date: $.and([$.gte(['$date', dateNumRange.begin]), $.lte(['$date', dateNumRange.end])])
    }


    改成这样试试?

    .match(
        $.and([
            { eno: eno },
            { date: { $gte: dateNumRange.begin, $lte: dateNumRange.end } }
        ])
    )


    2019-07-29
    赞同 2
    回复 6
    • Jahn
      Jahn
      2019-08-05
      你好 请问在聚合match中如何进行日期的比较 gte提示参数错误
      2019-08-05
      回复
    • 如果没有如果
      如果没有如果
      2019-08-07
      碰到类似问题,已解决。
      2019-08-07
      回复
    • 关家宝
      关家宝
      2019-08-11回复如果没有如果
      @如果没有如果,大佬,请问这个问题怎么解决呀?
      2019-08-11
      回复
    • move
      move
      2019-08-27回复如果没有如果
      怎么解决的
      2019-08-27
      回复
    • 如果没有如果
      如果没有如果
      2019-09-09回复关家宝
      就是按照这条回复的方法
      2019-09-09
      回复
    查看更多(1)
  • 郑旭东
    郑旭东
    2019-09-30

    这句代码怎么看着像天书,实际运行也提示语法错误,$后面的.都搞没了?

    date: { $gte: dateNumRange.begin, $lte: dateNumRange.end }


    2019-09-30
    赞同
    回复
  • Rocbin
    Rocbin
    2019-07-28

    看提示的样子,是不是BUG呢?

    2019-07-28
    赞同
    回复
登录 后发表内容