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
运算符时,需要注意数据类型的兼容性,确保转换后的结果符合预期。