Как условно установить значение для родительского поля на основе другого поля внутри массива в агрегате mongodb? - PullRequest
1 голос
/ 19 июня 2020

Я хочу установить переменную на уровне функции внутри оператора совокупной карты. Вот фрагмент того, что у меня есть до сих пор.

$project: {
  collectionId: 1,
  name: 1,
  description: 1,
  image: 1,
  created: 1,
  updated: 1,
  isPresent: "no",
  "products": {
    $map: {
      "input": "$products",
      as: "product",
      in: {
        "title": "$$product.name",
        "imageUrl": "$$product.mainImage",
        "productId": "$$product.productId",
        "$isPresent": "yes"
      }
    }
  },
  total: {
    $size: "$products"
  },
  userId: "$user.userId",
  userName: "$user.name",
}

Я хочу установить для значения узла isPresent значение yes внутри оператора карты в in на основе условия. На данный момент я оставил это просто "да". Но это не работает.

Как это сделать?

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете использовать операторы $ in и $ cond :

db.collection.aggregate([
    /** `$products.productId` gives an array of 'productId''s from products array */
    {
      $addFields: { isPresent: { $cond: [ { $in: [ 2, "$products.productId" ] }, "Yes", "No" ] } }
    }
  ])

Тест: mongoplayground

Примечание:

Поскольку мы используем $in, каждый документ, проходящий через это, должен иметь products массив, иначе $in выдаст ошибку, если там какие-либо такие случаи вам необходимо пропустить для тех документов, которые не имеют массива products.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...