MongoDB $ substr从索引到索引

时间:2018-07-30 14:36:32

标签: string mongodb substr operations

数据类似于“ abc abc abc(xyz)efg efg”。

我正在尝试从字符串中提取xyz。

在$ project部分尝试这样做:

 $project:   {
        bracketextract : { $substr: [ "$title",{ $indexOfCP: [ "$title", "(" ]}, { $indexOfCP: [ "$title", ")" ]} - { $indexOfCP: [ "$title", "(" ]} ]}, 
    }

1 个答案:

答案 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" ] } ] }
                }
            }
        }
    }
])