开发者社区> 问答> 正文

MongoDB中不用$where如何实现查询多字段计算后的值?

现在的写法如下

{$where: 'this.total_fee - this.withdraw_fee > 0'}
要求很简单,查找字段A减字段B大于0的项,但$where查询起来很慢,想请问这种需求不通过$where是否可以实现,如何实现?

本问题及下方已被采纳的回答均来自云栖社区【Redis&MongoDB 社区大群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。

展开
收起
李博 bluemind 2019-04-08 14:28:32 1848 0
1 条回答
写回答
取消 提交回答
  • 云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147

    这个字段是实时计算出来的没有办法用索引来优化,所以会慢。
    建议你单独维护一个字段,假设为x,其值就是total_fee - withdraw_fee, 并在上面加索引,每次更新这两个字段的时候顺带更新下这个字段:

    db.coll.updateOne({...}, {

    $set: {total_fee: newFee},
    $inc: {x: newFee}    // <-额外维护的字段

    })
    db.coll.updateOne({...}, {

    $set: {withdraw_fee: newFee},
    $inc: {x: -newFee}    // <-额外维护的字段

    })

    2019-07-17 23:32:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载