$project拆分字符串并筛选空值



有没有办法拆分字符串,然后从生成的数组中删除空值?

我已经尝试过这个,但是path的值是一个数组数组而不是字符串数组

我假设通过使用数组它会按顺序执行它,但它似乎没有这样做......

这是在$project

{
path: [
{
$split: ['$filename', '/']
}, {
$filter: {
input: '$path',
as: 'str',
cond: {
$ne: ['$$str', '']
}
}
}
]
}

一些示例文档:

{ filename: '/a/b/c.txt' }
{ filename: '/abc/123.txt' }
{ filename: '/path/to/file.txt' }

当前输出:

{
path: [
['', 'a', 'b', 'c.txt'],
null
]
}

我想要:

{
path: ['a', 'b', 'c.txt']
}

我能够使用 2个$project阶段来实现这一点,但这似乎是多余的。有可能在一个阶段完成吗?

你想做的事情可以在单个$project阶段完成

db.collection.aggregate([
{ "$project": {
"path": {
"$filter": {
"input": { "$split": [ "$filename", "/" ] },
"as": "str",
"cond": {
"$ne": [ "$$str", "" ]
}
}
}
}}
])

或者使用$slice$split聚合

db.collection.aggregate([
{ "$project": {
"path": {
"$slice": [
{ "$split": [ "$filename", "/" ] },
1,
{ "$size": { "$split": [ "$filename", "/" ] } }
]
}
}}
])

最新更新