我有幾個檔案,我想從data欄位中洗掉字母,基于欄位中的第一個_,data請參閱以下輸出。如果資料為空,則獲取訊息“未自動找到”
[
{
"data": "ABCS_auto"
},
{
"data": "TRQWEY_car_2"
},
{
"data": "ALPHAB1234RAVO_Garie_2__4_22__11"
},
{
"data": ""
},
]
預期產出
[
{
"data": "auto"
},
{
"data": "car_2"
},
{
"data": "Garie_2__4_22__11"
},
{
"data": "No Auto found"
},
]
uj5u.com熱心網友回復:
試試這個:
db.collection.aggregate([{$project: {data: {$arrayElemAt:[{ $split:["$data","_"]},1]}}}])
uj5u.com熱心網友回復:
將$ifNull用于“No Auto Found”,將 $split用于“_”
db.collection.aggregate([
{
$project: {
data: {
$ifNull: [
{
$arrayElemAt: [
{
$split: [
"$data",
"_"
]
},
1
]
},
"No Auto found"
]
}
}
}
])
這是一個有效的mongoplayground 鏈接
uj5u.com熱心網友回復:
$set- 設定split_data欄位:1.1。如果
data不是空字串,則用“_”分割并回傳陣列。1.2. 否則回傳空陣列。
$project- 裝飾輸出檔案。2.1。如果
split_data不是空陣列,則2.1.1。
$trim從結果 2.1.1.1 開始“_”。2.1.1.1。使用
$reduce, 將字串與結果中的“_”連接起來,從 中洗掉第一項split_data。2.2. 其他默認訊息。
db.collection.aggregate([
{
$set: {
split_data: {
$cond: {
if: {
$not: {
$or: [
{
"$eq": [
"$data",
null
]
},
{
$eq: [
"$data",
""
]
}
]
}
},
then: {
$split: [
"$data",
"_"
]
},
else: []
}
}
}
},
{
$project: {
data: {
"$cond": {
"if": {
$not: {
$eq: [
"$split_data",
[]
]
}
},
"then": {
"$trim": {
"input": {
$reduce: {
input: {
"$slice": [
"$split_data",
1,
{
$size: "$split_data"
}
]
},
initialValue: "",
in: {
$concat: [
"$$value",
"_",
"$$this"
]
}
}
},
"chars": "_"
}
},
"else": "No auto found"
}
}
}
}
])
示例 Mongo Playground
我認為更容易的另一種方法是$regexFind:
$setdata_regex-通過搜索“_ .*”(以“_”和任何其他字符開頭的平均字串)創建帶有正則運算式匹配物件的欄位。$project- 裝飾輸出檔案。2.1。從 中修剪“_”
data_regex.match。2.2. 其他默認訊息。
db.collection.aggregate([
{
$set: {
data_regex: {
$regexFind: {
input: "$data",
regex: "_.*"
}
}
}
},
{
$project: {
data: {
"$cond": {
"if": {
$not: {
$eq: [
"$data_regex",
null
]
}
},
"then": {
"$trim": {
"input": "$data_regex.match",
"chars": "_"
}
},
"else": "No auto found"
}
}
}
}
])
示例 Mongo Playground ( $regexFind)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484511.html
