【问题标题】:Mongo Cast String to Number for QueryMongodb将字符串转换为数字以进行查询
【发布时间】:2017-12-20 23:48:02
【问题描述】:

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

示例数据

|           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} })

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    更新(从 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" })
    

    这不会使用任何索引,也不是很快,但对于小型集合来说可能还可以。

    尽管如此,我还是建议将数字存储为数字类型。因此,您应该将您的 strings 转换为 ints 或 longs(或者甚至可能是 doubles),如下所示:how to convert string to numerical values in mongodb

    【讨论】:

    • 我觉得这很令人沮丧。使用 MongoDB 的意义不在于您可以拥有灵活的模式(有一天您要存储字符串,第二天要存储数字,它们都可以工作)。现在看来,我需要回去将所有这些字符串数字值转换为数字。
    • @Joao,完全同意你的看法。
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多