MongoDB $cond
在 MongoDB 中,$cond
运算符表示条件表达式,可以根据条件的真假返回不同的值。它和其他编程语言中的条件语句类似,可以帮助我们在查询数据时对文档进行条件判断和处理。
语法
$cond
运算符的语法如下:
{
$cond: {
if: <条件表达式>,
then: <返回结果为真时的值>,
else: <返回结果为假时的值>
}
}
if
字段用于指定条件表达式,可以是任意的表达式。then
字段用于指定条件为真时的返回结果。else
字段用于指定条件为假时的返回结果。
示例
假设我们有一个名为 students
的集合,每条文档包含学生的姓名、年龄和成绩。我们想根据成绩的不同给每个学生评定等级,可以使用 $cond
运算符实现。
下面是一个示例的文档结构:
{
"_id": 1,
"name": "Alice",
"age": 20,
"score": 86
}
我们希望根据学生的分数将其分为 A、B、C 三个等级,具体规则如下:
- 如果 score 大于等于 90,则等级为 A;
- 如果 score 大于等于 80 且小于 90,则等级为 B;
- 如果 score 小于 80,则等级为 C。
我们可以使用 $cond
运算符来实现该逻辑:
db.students.aggregate([
{
project: {
name: 1,
score: 1,
grade: {cond: {
if: { gte: ["score", 90] },
then: "A",
else: {
cond: {
if: {gte: ["$score", 80] },
then: "B",
else: "C"
}
}
}
}
}
}
])
在这个示例中,我们使用 $project
阶段来选择需要的字段,并在其中使用 $cond
来判断每个学生的成绩等级。如果分数大于等于 90,则等级为 A;如果分数大于等于 80 且小于 90,则等级为 B;如果分数小于 80,则等级为 C。
运行结果
假设集合中有以下两个文档:
{ "_id": 1, "name": "Alice", "score": 86 }
{ "_id": 2, "name": "Bob", "score": 78 }
经过上面的查询操作后,返回的结果如下:
{ "_id": 1, "name": "Alice", "grade": "B" }
{ "_id": 2, "name": "Bob", "grade": "C" }
根据学生的分数,Alice 被评定为 B 级,Bob 被评定为 C 级。
总结
$cond
运算符在 MongoDB 中非常实用,可以让我们根据条件来返回不同的结果。它的嵌套能力也很强,可以处理多层嵌套的逻辑判断。在实际应用中,我们可以根据具体的业务需求来使用 $cond
运算符,实现灵活的条件判断和数据处理。