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 运算符将 age 和 gender 字段拼接为一个 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 运算符进行正则表达式匹配,返回匹配结果为 true 或 false。
除了字符串拼接和正则表达式匹配外, $toString 还可以用于将其他数据类型转换为字符串类型。例如,将整数类型转换为字符串类型,示例代码如下:
db.students.aggregate([
{
$project: {
score: 90,
scoreString: { $toString: "$score" }
}
}
])
运行上述聚合管道后,输出结果如下:
{ "_id": ObjectId("617a980f3c3c3d3b05647a85"), "score": 90, "scoreString": "90" }
在上述示例中,我们使用 $toString 运算符将整数类型的 score 字段转换为字符串类型,并将其保存在 scoreString 字段中。
结论
$toString 运算符可以将其他数据类型转换为字符串类型,并且可以用于字符串拼接和正则表达式匹配等场景。在使用 $toString 运算符时,需要注意数据类型的兼容性,确保转换后的结果符合预期。