查找字段和值之差小于 x 的文档

Find documents with difference between field and value less than x

假设我有这个文件:

{_id:1, value:2.21}
{_id:2, value:2.23}

然后如果例如我收到一个参数是 2.24,我想 return 文档 where abs(2.24-value)<=0.01 这具体地说 return 只有带有 [= 的文档9=]

所以总的来说,我想要 abs(value-parameter)<=x

的文档

谢谢。

不能直接进行ABS操作。但是您可以使用条件运算符 $cond.

db.numbers.aggregate([{
   $project: {
            value: {
                $subtract: [2.24, 
                            {$cond: [{$lt: ['$value', 0]}, 
                                     {$subtract: [0, '$value']}, 
                                     '$value']
                            }
                ]
            }
        }
    }, {
    $match: {
          value: {$lte: 0.01}
    }
}]);

使用aggregate命令进行运算,第一步做绝对值的投影,第二步做条件

请注意,您可能需要对绝对结果进行四舍五入以获得预期结果。

这可以是一个简单的 db.coll.find()$gte and $lte

> var foo = 2.24;
> var difference = 0.0100000000001
> db.numbers.find({value:{$gte: (foo - difference), $lte: (foo + difference)}})
{ "_id" : 2, "value" : 2.23 }

唯一的问题是 MongoDB 使用浮点运算,这意味着如果 difference 设置为 0.01,foo - difference 的结果可能类似于 2.23000000000000004(这会丢失第二个文件)。这就是为什么我将它设置为略高于我们实际寻找的差异。