【问题标题】:Convert String type to Number type when querying on MongoDB在 MongoDB 上查询时将 String 类型转换为 Number 类型
【发布时间】:2021-09-17 08:24:51
【问题描述】:

我有一个这样的 MongoDB 结构。

[
  {
    _id: 1,
    data: [ 
      { price : "2", title: "title-1" }
    ]
  },
  {
    _id: 2,
    data: [ 
      { price : "2.0", title: "title-2" }
    ]
  },
  {
    _id: 3,
    data: [ 
      { price : "2.00", title: "title-3" },
      { price : "2.99", title: "title-4" }
    ]
  }

我想编写一个查询,我可以在其中引入价格值等于 2(数字类型)的所有标题。但问题是,价格字段是字符串类型。当我要查询时,我必须为价格设置各种条件,例如:-

db.collection("test").find({ '$or': ["'data.price": '2'}, {"data.price": '2.0'}, {"data.price": '2.00'}] })

在 MongoDB 中有没有一种方法可以在查询之前说我们想要转换类型?或者有没有一种方法可以更好地编写上述查询?

【问题讨论】:

    标签: mongodb nosql find aggregation-framework


    【解决方案1】:

    理想情况下,您应该验证集合的输入参数,以便保持数据类型一致,尤其是将数字数据保留为数字而不是字符串是有益的,

    如果您想在查询之前转换现有项目,您需要使用$map$toDouble。进行此类转换后,您可以运行查询:

    db.collection.aggregate([
        {
            $project: {
                data: {
                    $map: {
                        input: "$data",
                        in: {
                            $mergeObjects: [
                                "$$this",
                                { price: { $toDouble: "$$this.price" } }
                            ]
                        }
                    }
                }
            }
        },
        {
            $match: { "data.price": 2 }
        }
    ])
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2016-05-20
      • 1970-01-01
      • 2016-03-10
      • 2012-05-09
      相关资源
      最近更新 更多