агрегирование базы данных mongo с $ cond, возвращающим значение из поля

#mongodb #mongodb-query #aggregation-framework

#mongodb #mongodb-запрос #агрегация-фреймворк

Вопрос:

Я пытаюсь создать приложение, aggregation которое возвращает поле (в документе) при выполнении двух условий, я делаю это на $project этапе и попытался записать это следующим образом :

 "conversionName" : { "$cond" : [ { "$and" : [ { "$eq" : [ "$webpage", "Product" ] }, { "$eq" : [ "$isConverted", true ] } ] }, "$conversion.name", 0 ] }
  

таким образом, если веб-страница является продуктом, а значение isConverted равно true, тогда оно показывает значение conversion.name в этом документе.

 The current aggregation fails due to :  "The $cond accumulator is a unary operator' on server main-shard-00-00-mhxad.gcp.mongodb.net:27017. "
  

Другие части агрегаций работают отлично.

Каким образом я могу вернуть значение с $cond одобрением? Если нет — какой другой способ может удовлетворить мои потребности?

Ответ №1:

В моем проекте это отлично работает таким образом :

 $cond: {
  if: {
    $and: [
      { "$eq" : [ "$webpage", "Product" ] },
      { "$eq" : [ "$isConverted", true ] },
    ],
  },
  then: "$conversion.name",
  else: 0,
},
  

Если это не сработает (и я не понимаю, почему это не сработает), then это выражение и может быть другим $cond :

 $cond: {
  if: { "$eq" : [ "$webpage", "Product" ] },
  then: {$cond: {if: { "$eq" : [ "$isConverted", true ] }, then: "$conversion.name", else: 0},
  else: 0,
},