Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MongoDB中替换$where的使用_Mongodb_Mongodb Query_Mongodb Php_Nosql - Fatal编程技术网

在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}}}
]);