我想把一個字串分割成字母陣列,就像我們在javascript中做的那樣。 例如,
let x = "String"。
x.split('') // ['S', 't', 'r', 'i', 'n', 'g']/span>
但是,如果我在聚合管道中使用$split做同樣的事情,就像下面一樣,
{
$project:{
_id:"$_id._id"。
name:"$_id.name"。
array_field:{ $split: ["$_id.name", "" /span>] }
}
}
它給我帶來的錯誤是這樣的,
{
"message" : "PlanExecutor error during aggregation :: caused by :: $split requires a non-empty separator" ,
"ok" : 0,
"code" : 40087,
"codeName" : "Location40087",
"name" : "MongoError".
}
誰能幫我解決這個問題。 謝謝。
uj5u.com熱心網友回復:
...$split需要一個非空的分隔符
。
當你用一個""(長度為零的字串)作為分隔符來分割一個字串(使用$split聚合運算子)時,這就是預期的錯誤。
你可以嘗試這種方法來獲得所需的結果(這將把字串欄位str: "string"到一個陣列欄位arr: ["s", "t", "r", "i", "n", "g" ]):
db.collection.aggregate( [
{
$addFields: {
arr: {
$function: {
body: function(s) {
return s.split(''/span>)。
},
args: ["$str"]。
lang: "js">
}
}
}
}
])
注意,$function的使用需要MongoDB v4.4.
uj5u.com熱心網友回復:
我推薦你將$substr與$map相結合,我們將遍歷字串的長度并使用$substr來選擇索引i處的字符,像這樣:
db.collection.aggregate( [
{
"$addFields"/span>: {
"newField"/span>: {
$map: {
input: {
$range: [
0,
{
"$strLenCP"/span>: "$key".
}
]
},
in: {
"$substr": [
"$key",
"$this",
1.
]
}
}
}
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307947.html
標籤:
