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

时间:2015-01-08 15:36:51

标签: mongodb

假设我有这些文件:

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

然后,如果我收到一个2.24的参数,我想返回文件,其中abs(2.24-value)< = 0.01这具体地只返回带有_id的文档:2

所以一般来说我想要文件,其中abs(value-parameter)< = x

谢谢。

2 个答案:

答案 0 :(得分:3)

这可以是一个简单db.coll.find() $gte$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(这将错过第二个文档)。这就是为什么我将它设置为仅仅高于我们实际需要的差异的原因。

答案 1 :(得分:0)

您无法直接进行ABS操作。但是你可以使用条件运算符$cond

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

使用aggregate命令执行操作,第一步是完成绝对值的投影,第二步是完成条件。

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