gpt4 book ai didi

mongodb - 如何将MongoDB中每个单词的首字母大写?

转载 作者:可可西里 更新时间:2023-11-01 09:10:32 28 4
gpt4 key购买 nike

这应该是一个快速的 2 分钟找到,但我搜索了一个小时,找不到任何解决方案。

How can i capitalize first letter of each word of the username field?

{
"_id" : ObjectId("5908288bfbce59540a67fa11"),
"username" : "JOHN DOE"
},
{
"_id" : ObjectId("5908288bfbce59540a67fa12"),
"username" : "jane doe"
}

已尝试 this solution我不太明白,但它不起作用:Fetched 0 record(s) in 0ms

db.getCollection('test').toupper.aggregate(
[
{
$project: {
username: {
$concat: [{
$toUpper: { $substr: ["$username", 0, 1] }
}, { $substr: ["$username", 1, 3] }]
}
}
}])

最佳答案

长话短说

var map = {
"$map": {
"input": { "$split": [ "$username", " " ] },
"as": "name",
"in": {
"$concat": [
{ "$toUpper": { "$substrCP": ["$$name", 0, 1] } },
{
"$substrCP": [
"$$name",
1,
{ "$subtract": [{ "$strLenCP": "$$name" }, 1 ]}
]
}
]
}
}
};

db.getCollection('test').aggregate([
{
"$addFields": {
"username": {
"$concat": [
{ "$arrayElemAt": [map, 0] },
" ",
{ "$arrayElemAt": [map, 1] }
]
}
}
}
]);

要将字符串中每个单词的首字母大写,您首先需要使用 $split 将字符串按给定的分隔符拆分 运算符,在这种情况下,分隔符将是一个空格:

示例

{ "$split": [ "jane doe", " " ] }                                           

结果

[ "jane", "doe" ]

下一步是使用 $map 运算符对上面的结果数组和数组中的每个元素应用 $toUpper 对带有 $substrCP 的子字符串进行转换 以及与 $concat 的连接过程 返回转换后的数组。

在转换中,您需要获取给定单词的第一个字母,将该字母转换为大写,然后连接字符串的其余部分。

对于第一部分,转换如下:

示例

{ "$toUpper": { "$substrCP": ["jane", 0, 1] } }                             

结果

"J"

对于字符串的其余部分

示例

{                                                                           
"$substrCP": [
"jane",
1,
{ "$subtract": [{ "$strLenCP": "jane" }, 1 ]}
]
}

结果

"ane"

串联

示例

{                                                                           
$concat: [
{ "$toUpper": { "$substrCP": ["jane", 0, 1] } },
{
"$substrCP": [
"jane",
1,
{ "$subtract": [{ "$strLenCP": "jane" }, 1 ]}
]
}
]
}

结果

"Jane"

映射到数组中的元素

$map 中使用以上内容:

示例

{
"$map": {
"input": { "$split": [ "jane doe", " " ] },
"as": "name",
"in": {
"$concat": [
{ "$toUpper": { "$substrCP": ["$$name", 0, 1] } },
{
"$substrCP": [
"jane",
1,
{ "$subtract": [{ "$strLenCP": "$$name" }, 1 ]}
]
}
]
}
}
}

结果

[ "Jane", "Doe" ]

然后您可以将上面的内容用作 $arrayElemAt 的表达式 运算符并使用 $concat 再次作为:

{
"$addFields": {
"username": {
"$concat": [
{ "$arrayElemAt": [map, 0] },
" ",
{ "$arrayElemAt": [map, 1] }
]
}
}
}

您的最终聚合操作变为:

var map = {
"$map": {
"input": { "$split": [ "$username", " " ] },
"as": "name",
"in": {
"$concat": [
{ "$toUpper": { "$substrCP": ["$$name", 0, 1] } },
{
"$substrCP": [
"$$name",
1,
{ "$subtract": [{ "$strLenCP": "$$name" }, 1 ]}
]
}
]
}
}
};

db.getCollection('test').aggregate([
{
"$addFields": {
"username": {
"$concat": [
{ "$arrayElemAt": [map, 0] },
" ",
{ "$arrayElemAt": [map, 1] }
]
}
}
}
]);

注意:尚未测试以上内容,但它至少应该为您提供一些解决问题的方向。

关于mongodb - 如何将MongoDB中每个单词的首字母大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43755093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com