代码之家  ›  专栏  ›  技术社区  ›  Get Off My Lawn

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

  •  1
  • Get Off My Lawn  · 技术社区  · 7 年前

    是否有方法拆分字符串,然后从生成的数组中移除空值?

    我试过了,但是 path 是一个 阵列 而不是 字符串数组 .

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

    这是在 $项目 :

    {
      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 $项目 但这似乎是多余的。能在一个阶段完成吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ashh    7 年前

    你想做的事可以一个人做 $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", "/" ] } }
          ]
        }
      }}
    ])