如何将字符串拆分为MongoDB聚合框架中的字母数组?



我想把一个字符串分成字母数组,就像我们在javascript中做的那样,例如,

let x = "String";
x.split('') // ['S', 't', 'r', 'i', 'n', 'g']

但是,如果我在聚合管道中使用$split做同样的事情,如下所示,

{
$project:{
_id:"$_id._id",
name:"$_id.name",
array_field:{ $split: ["$_id.name", ""] }
}
}

它像这样抛出错误,

{
"message" : "PlanExecutor error during aggregation :: caused by :: $split requires a non-empty separator",
"ok" : 0,
"code" : 40087,
"codeName" : "Location40087",
"name" : "MongoError"
}
有谁能帮我解决这个问题吗?谢谢。

…$split需要一个非空分隔符

当您将字符串(使用$split聚合运算符)与""(长度为零的字符串)作为分隔符时,这是预期的错误。

您可以尝试这种方法来获得所需的结果(这将字符串字段str: "string"拆分为数组字段arr: [ "s", "t", "r", "i", "n", "g" ]):

db.collection.aggregate([
{ 
$addFields: { 
arr: {
$function: {
body: function(s) {
return s.split('');
},
args: [ "$str" ],
lang: "js"
}
}
}
}
])

注意$function的使用需要MongoDB v4.4。

我建议您将$substr与$map结合使用,我们将遍历字符串的长度并使用$substr选择索引i处的字符,如下所示:

db.collection.aggregate([
{
"$addFields": {
"newField": {
$map: {
input: {
$range: [
0,
{
"$strLenCP": "$key"
}
]
},
in: {
"$substr": [
"$key",
"$$this",
1
]
}
}
}
}
}
])

Mongo操场

相关内容

  • 没有找到相关文章