Mongo将字符串转换为查询号

时间:2017-12-20 23:48:02

标签: mongodb

有没有办法对数字的字符串字段进行小于或等于查询?

示例数据

|           Id           |           Price           |
|           1            |           "1000.00"       |
|           2            |           "5400.00"       |
|           3            |           "750.00"        |

当我执行此查询时,它返回所有记录:

db.MyCollection.find({ Price: {$lte: "1000.0"} })

当我执行此查询时,它不返回任何内容:

db.MyCollection.find({ Price: {$lte: 1000.0} })

1 个答案:

答案 0 :(得分:6)

更新(从MongoDB v4.0开始有效):

您可以使用$expr$toDouble的组合来实现所需的行为,如下所示:

db.MyCollection.find({ $expr: { $lte: [ { $toDouble: "$Price" }, 1000.0 ] } })

原始答案(MongoDB v3.6及以下版本):

MongoDB无法将字符串转换为数字。因此,您唯一的选择是使用可怕的$where运算符:

db.MyCollection.find({ $where: "parseInt(this.Price) <= 1000" })

这不会使用任何索引,并且速度不是很快,但对于小型集合来说可能还算不错。

尽管如此,我建议将数字存储为数字类型。因此,您应该将string转换为intlong s(或者可能double s),如下所示:how to convert string to numerical values in mongodb