有没有办法对数字的字符串字段进行小于或等于查询?
示例数据
| 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} })
答案 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
转换为int
或long
s(或者可能double
s),如下所示:how to convert string to numerical values in mongodb