Mongo 聚合:添加从另一个字段派生的字段

时间:2021-03-19 09:59:44

标签: mongodb aggregation-framework

我在集合中存在以下形式的文档:

{
  name: "Michael",
  likes: [{ name: "reading", amount: 80}, {name: "eating", amount: 70}]
}

我想为所有文档添加一个新字段,根据该人是否喜欢阅读,该字段将是 0/1。我必须检查是否存在 likes.name = "reading"。 我尝试在我的聚合管道中添加以下阶段来实现这一点:

$addFields: {
  likes_reading: {
    $cond: {
      if: {
        $eq: ["$likes.name", "reading"]
      },
      then: 1,
      else: 0
    }
  }
}

然而,$eq 似乎并没有检查 likes 数组的“任何”元素是否具有所需的名称,这是我在许多其他地方看到的当我们将值与数组进行比较时的行为。结果所有 likes_reading 都设置为 0。我需要帮助正确设置这个新字段。

1 个答案:

答案 0 :(得分:3)

由于 likes 是一个数组,您必须使用 $in 运算符,所以试试这个:

{
    $addFields: {
        likes_reading: {
            $cond: {
                if: { $in: ["reading", "$likes.name"] },
                then: 1,
                else: 0
            }
        }
    }
}

{
    $addFields: {
        likes_reading: {
            $cond: [{ $in: ["reading", "$likes.name"] }, 1, 0]
        }
    }
}