数据类似于“ abc abc abc(xyz)efg efg”。
我正在尝试从字符串中提取xyz。
在$ project部分尝试这样做:
$project: {
bracketextract : { $substr: [ "$title",{ $indexOfCP: [ "$title", "(" ]}, { $indexOfCP: [ "$title", ")" ]} - { $indexOfCP: [ "$title", "(" ]} ]},
}
答案 0 :(得分:0)
您应该使用$subtract的长度(当前正在使用-
),并且应该有1
$add-ed到起点
db.col.aggregate([
{
$project: {
bracketextract : { $substr: [ "$title", { $add: [ { $indexOfCP: [ "$title", "(" ]}, 1 ] } , { $subtract: [ { $indexOfCP: [ "$title", ")" ]}, { $add: [ { $indexOfCP: [ "$title", "(" ]}, 1 ] } ] } ]},
}
}
])
使用$let更具可读性:
db.col.aggregate([
{
$project: {
bracketextract: {
$let: {
vars: {
start: { $add: [ { $indexOfCP: [ "$title", "(" ] }, 1 ] },
end: { $indexOfCP: [ "$title", ")" ] }
},
in: { $substr: [ "$title", "$$start", { $subtract: [ "$$end", "$$start" ] } ] }
}
}
}
}
])