开发者社区 问答 正文

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 1946 分享
分享
版权
举报
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 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等