我在集合中存在以下形式的文档:
{
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。我需要帮助正确设置这个新字段。
答案 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]
}
}
}