有没有一种方法可以对数字的字符串字段执行小于或等于查询?
示例数据
| Id | Price |
| 1 | "1000.00" |
| 2 | "5400.00" |
| 3 | "750.00" |
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,它返回所有记录:
db.MyCollection.find({ Price: {$lte: "1000.0"} })
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,它不返回任何内容:
db.MyCollection.find({ Price: {$lte: 1000.0} })
Run Code Online (Sandbox Code Playgroud)
更新(从MongoDB v4.0起有效):
您可以结合使用$ expr和$ toDouble来实现所需的行为,如下所示:
db.MyCollection.find({ $expr: { $lte: [ { $toDouble: "$Price" }, 1000.0 ] } })
Run Code Online (Sandbox Code Playgroud)
原始答案(MongoDB v3.6及更低版本):
MongoDB无法将字符串转换为数字。因此,这里唯一的选择是使用可怕的$ where运算符:
db.MyCollection.find({ $where: "parseInt(this.Price) <= 1000" })
Run Code Online (Sandbox Code Playgroud)
这将不使用任何索引,并且速度并不很快,但是对于小型集合来说还是可以的。
尽管如此,我还是建议将数字存储为数字类型。因此,您应该将strings 转换为ints或longs(甚至可能是doubles),如下所示:如何在mongodb中将字符串转换为数值
| 归档时间: |
|
| 查看次数: |
4705 次 |
| 最近记录: |