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

现在的写法如下

{$where: 'this.total_fee - this.withdraw_fee > 0'}

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

阅读 1.7k
1 个回答

这个字段是实时计算出来的没有办法用索引来优化,所以会慢。
建议你单独维护一个字段,假设为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}    // <-额外维护的字段
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题