现在的写法如下
{$where: 'this.total_fee - this.withdraw_fee > 0'}
要求很简单,查找字段A减字段B大于0的项,但$where查询起来很慢,想请问这种需求不通过$where是否可以实现,如何实现?
本问题及下方已被采纳的回答均来自云栖社区【Redis&MongoDB 社区大群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。
这个字段是实时计算出来的没有办法用索引来优化,所以会慢。
建议你单独维护一个字段,假设为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} // <-额外维护的字段
})
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。