$ project разбить строку и отфильтровать пустые значения - PullRequest
0 голосов
/ 27 августа 2018

Есть ли способ разбить строку, а затем удалить пустые значения из сгенерированного массива?

Я пробовал это, но значение 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 $ project этапов, но это кажется излишним.Можно ли сделать это за один этап?

1 Ответ

0 голосов
/ 27 августа 2018

То, что вы пытаетесь сделать, может быть выполнено в одиночном $project stage

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", "/" ] } }
      ]
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...