在MongoDB中替换$where的使用
我有一个问题,我需要比较两个字段的除法是否大于或等于某个值。因此,我找到的解决方案是:在MongoDB中替换$where的使用,mongodb,mongodb-query,mongodb-php,nosql,Mongodb,Mongodb Query,Mongodb Php,Nosql,我有一个问题,我需要比较两个字段的除法是否大于或等于某个值。因此,我找到的解决方案是: { "$where": "this.total / this.limit > 0.6" } 但是文档说$where的使用对性能没有好处,因为它将运行一个javascript函数,并丢失索引 是否有人有更好的解决方案,不使用$where 谢谢 您可以在这里使用divide()移动到聚合框架: 注意:聚合框架自v2.1以来是新的 但是文档说$where的使用对性能没有好处,因为它将运行javasc
{
"$where": "this.total / this.limit > 0.6"
}
但是文档说$where的使用对性能没有好处,因为它将运行一个javascript函数,并丢失索引
是否有人有更好的解决方案,不使用$where
谢谢 您可以在这里使用divide()移动到聚合框架: 注意:聚合框架自v2.1以来是新的 但是文档说$where的使用对性能没有好处,因为它将运行javascript函数,并丢失索引 无论如何,你不能用索引来做这个,没有办法用索引来做这样的数学函数。关键是JS引擎比普通查询慢16倍,聚合框架应该更快。不仅如此,JS锁对于所有查询都是全局的 当然,最快的方法是在修改应用程序中的记录时,将此总和预聚合到另一个字段中,这样您就不需要这些,只需要一个普通的查询
db.col.aggregate([
{$match: {_id: whatever_or_whatever_clause_you_want}},
{$project: {
// Your document fields
divided_limit: {$divide: ['$total', '$limit']}
}},
{$match: {divided_limit: {$gt: 0.6}}}
]);