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



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

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

我想在所有文档中添加一个新字段,该字段将为0/1,具体取决于此人是否喜欢阅读。我必须检查是否存在点赞。name=";阅读";。我尝试在聚合管道中添加以下阶段来实现这一点:

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

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

由于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]
}
}
}

最新更新