Как преобразовать bool в строку и изменить значения по условию в конвейере агрегации - MongoDB - PullRequest
1 голос
/ 23 марта 2020

Иметь коллекцию с записями, Нужно преобразовать логические значения столбца в строку:

[
  {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    passed_phd: true,
    age: 55,
    location: "texas",

  },
  {
    _id: "bmasndvhjbcx",
    name: "mark",
    occupation: "scientist",
    age: 45,
    passed_phd: true,
    location: "texas",

  },
  {
    _id: "bmasndvhjbca",
    name: "stuart",
    occupation: "lab assistant",
    age: 25,
    passed_phd: false,
    location: "texas",

  },
  {
    _id: "bmasndvhjbcq",
    name: "cooper",
    occupation: "physicist",
    age: 69,
    passed_phd: false,
    location: "texas"
  }
]

как изменить логическое значение записей в строку.

значение, имеющее true (логическое значение) в значение_передачи, должно быть преобразовано в «yes» (строка)

значение, которое имеет значение false (логическое значение) в переданном_поле, должно быть преобразовано в «нет» (строка)

[
  {
    _id: "bmasndvhjbcw",
    name: "lucas",
    occupation: "scientist",
    passed_phd: "yes",
    age: 55,
    location: "texas",

  },
  {
    _id: "bmasndvhjbcx",
    name: "mark",
    occupation: "scientist",
    age: 45,
    passed_phd: "yes",
    location: "texas",

  },
  {
    _id: "bmasndvhjbca",
    name: "stuart",
    occupation: "lab assistant",
    age: 25,
    passed_phd: "no",
    location: "texas",

  },
  {
    _id: "bmasndvhjbcq",
    name: "cooper",
    occupation: "physicist",
    age: 69,
    passed_phd: "no",
    location: "texas"
  }
]

mongodb версия 4.0

Попробовал это:


{passed_phd : [{'passed_phd':true},{$set:{'passed_phd':"yes"}] }

Ошибка:

Expected "[" or AggregationStage but "{" found.

1 Ответ

1 голос
/ 23 марта 2020

Вам необходимо использовать $ toString для преобразования в строки и условный оператор для изменения значений поля, попробуйте добавить ниже этап в ваш конвейер агрегации:

{
    $addFields: {
      passed_phd: {
        $switch: {
          branches: [
            {
              case: {
                $eq: [
                  "$passed_phd",
                  true
                ]
              },
              then: "yes"
            },
            {
              case: {
                $eq: [
                  "$passed_phd",
                  false
                ]
              },
              then: "no"
            },

          ],
          default: {
            $toString: "$passed_phd"
          }
        }
      }
    }
  }

Test: MongoDB-Playground

Вам не нужно использовать $switch, если поле существует и может быть только два значения для поля passed_phd, поэтому просто используйте оператор $cond:

{
    $addFields: {
      passed_phd: {
        $cond: [
          {
            $eq: [
              "$passed_phd",
              true
            ]
          },
          "yes",
          "no"
        ]
      }
    }
  }

Тест: MongoDB-Playground

...