如何使用数据库聚合match过滤$.and
发布于 6 年前 作者 yinguiying 3501 次浏览 来自 官方Issues

我需要在云函数中查询数据库,聚合计算一个人的某月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 回复

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

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

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 } }
    ])
)

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

回到顶部