MongoDB $toString 运算符介绍

在 Mongodb 中, $toString 运算符用于将任意类型的数据转换为字符串类型。 $toString 运算符可以用于聚合管道中的 $project 阶段,也可以用于查询中的 $match 阶段、$lookup 阶段等。

语法

$toString 的语法如下:

{ $toString: <expression> }

其中,<expression>是任意 Mongodb 表达式,可以是一个文档的字段、常量或其他的表达式。

使用场景

$toString 运算符可以用于将任意类型的数据转换为字符串类型,例如在聚合管道中,当需要将数值类型、日期类型、布尔类型等转换为字符串类型进行处理时,可以使用 $toString 运算符。

示例

以下是两个使用 $toString 运算符的示例:

示例 1

假设我们有如下的文档集合:

{ "_id": 1, "name": "Alice", "age": 20, "gender": "F" }
{ "_id": 2, "name": "Bob", "age": 25, "gender": "M" }
{ "_id": 3, "name": "Charlie", "age": 30, "gender": "M" }

现在我们需要将 age 字段和 gender 字段拼接为一个字符串类型的字段,并进行字符串匹配。我们可以使用 $toString 运算符将 age 和 gender 字段转换为字符串类型,然后使用 $concat 运算符将它们拼接为一个字符串类型的字段,最后使用 $match 运算符进行字符串匹配,示例代码如下:

db.collection.aggregate([
  {
    $project: {
      name: 1,
      age: 1,
      gender: 1,
      age_gender: {
        $concat: [{ $toString: "$age" }, "-", "$gender"]
      }
    }
  },
  {
    $match: {
      age_gender: /^2/
    }
  }
])

在上面的示例中,我们使用 $project 运算符将 agegender 字段拼接为一个 age_gender 字段,并将 age 字段和 gender 字段转换为字符串类型。然后使用 $match 运算符进行字符串匹配,筛选出 age_gender 字段以 2 开头的文档。

示例 2

假设我们有如下的文档集合:

{ "_id": 1, "price": 10.5 }
{ "_id": 2, "price": 20.5 }
{ "_id": 3, "price": 30.5 }

现在我们需要将 price 字段转换为字符串类型,并将字符串类型的 price 字段添加单位 $。我们可以使用 $toString 运算符将 price 字段转换为字符串类型,然后使用 $concat 运算符将它们拼接为一个字符串类型的字段,示例代码如下:

db.collection.aggregate([
  {
    $project: {
      price: 1,
      price_str: {
        $concat: ["$", { $toString: "$price" }]
      }
    }
  }
])

在上面的示例中,我们使用 $project 运算符将 age 字段和 gender 字段拼接为一个字符串类型的字段,然后使用 $regexMatch 运算符进行正则表达式匹配,返回匹配结果为 truefalse

除了字符串拼接和正则表达式匹配外, $toString 还可以用于将其他数据类型转换为字符串类型。例如,将整数类型转换为字符串类型,示例代码如下:

db.students.aggregate([
  {
    $project: {
      score: 90,
      scoreString: { $toString: "$score" }
    }
  }
])

运行上述聚合管道后,输出结果如下:

{ "_id": ObjectId("617a980f3c3c3d3b05647a85"), "score": 90, "scoreString": "90" }

在上述示例中,我们使用 $toString 运算符将整数类型的 score 字段转换为字符串类型,并将其保存在 scoreString 字段中。

结论

$toString 运算符可以将其他数据类型转换为字符串类型,并且可以用于字符串拼接和正则表达式匹配等场景。在使用 $toString 运算符时,需要注意数据类型的兼容性,确保转换后的结果符合预期。