查找字段和值之差小于 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(这会丢失第二个文件)。这就是为什么我将它设置为略高于我们实际寻找的差异。
假设我有这个文件:
{_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(这会丢失第二个文件)。这就是为什么我将它设置为略高于我们实际寻找的差异。