MongoDB 聚合 - $project 和 $cond

作者:编程家 分类: mongodb 时间:2025-11-08

使用 MongoDB 进行数据聚合操作时,$project 和 $cond 是两个非常有用的操作符。$project 操作符可以用于选择需要显示的字段,同时还可以进行一些字段计算和重命名。$cond 操作符则可以根据条件对字段进行条件判断和赋值。在本文中,我们将详细介绍这两个操作符的使用方法,并提供一些示例代码。

$project 操作符

$project 操作符用于选择需要显示的字段,并可以进行一些字段计算和重命名。它的基本语法如下:

mongodb

{

$project: {

field1: ,

field2: ,

...

}

}

其中,field1、field2 等表示需要显示的字段, 等表示对字段进行计算和重命名的表达式。

下面是一个实际的例子,假设我们有一个名为 "students" 的集合,其中包含学生的姓名、年龄和成绩等信息。我们只需要显示学生的姓名和年龄,并计算出他们的出生年份。我们可以使用 $project 操作符来实现:

mongodb

db.students.aggregate([

{

$project: {

_id: 0,

name: 1,

age: 1,

birthYear: { $subtract: [2022, "$age"] }

}

}

])

在上面的代码中,我们使用了 $project 操作符选择了需要显示的字段,其中 _id: 0 表示不显示默认的 _id 字段,name: 1 和 age: 1 表示显示 name 和 age 字段。而 birthYear: { $subtract: [2022, "$age"] } 表示计算出生年份,通过将当前年份 2022 减去学生的年龄来得到。

$cond 操作符

$cond 操作符可以根据条件对字段进行条件判断和赋值。它的基本语法如下:

mongodb

{

$project: {

field: {

$cond: {

if: ,

then: ,

else:

}

},

...

}

}

其中,field 表示需要进行条件判断和赋值的字段, 表示条件, 表示条件成立时的赋值表达式, 表示条件不成立时的赋值表达式。

下面是一个实际的例子,假设我们有一个名为 "orders" 的集合,其中包含订单的金额和状态等信息。我们需要根据订单金额判断订单的状态,如果订单金额大于 1000,则状态为 "高额订单",否则状态为 "普通订单"。我们可以使用 $cond 操作符来实现:

mongodb

db.orders.aggregate([

{

$project: {

_id: 0,

amount: 1,

status: {

$cond: {

if: { $gt: ["$amount", 1000] },

then: "高额订单",

else: "普通订单"

}

}

}

}

])

在上面的代码中,我们使用了 $cond 操作符对订单的状态进行条件判断和赋值。$gt: ["$amount", 1000] 表示判断订单金额是否大于 1000,如果成立则赋值为 "高额订单",否则赋值为 "普通订单"。

在本文中,我们介绍了 MongoDB 聚合操作中的 $project 和 $cond 操作符。$project 操作符用于选择需要显示的字段,并可以进行一些字段计算和重命名。$cond 操作符可以根据条件对字段进行条件判断和赋值。通过灵活使用这两个操作符,我们可以对数据进行更加精确的筛选和处理,从而满足不同的业务需求。

希望本文对你理解和使用 MongoDB 聚合操作中的 $project 和 $cond 操作符有所帮助!