MongoDB-聚合操作$project
什么是聚合操作
- 聚合操作就是通过一个方法完成一系列的操作
- 在聚合操作中, 每一个操作我们称之为一个阶段
- 聚合操作会将上一个阶段处理结果传给下一个阶段继续处理
- 所有阶段都处理完毕会返回一个新的结果集给我们
聚合操作格式
db.<collection>.aggregate(<pipeline>, <options>)
<pipeline>: 定义每个阶段操作<options>: 聚合操作额外配置
聚合管道阶段
可以利用,
$project对输入文档进行再次投影
- 作用: 按照我们需要的格式生成结果集
- 格式:
{$project:{<field>:<value>}}
好了介绍了这么多我们来看示例吧,首先添加测试数据如下:
db.person.insert([
{name:{firstName:'Jonathan', lastName:'Lee'}, age:18, book:{name:'玩转HTML', price: 88}},
{name:{firstName:'Amelie', lastName:'BNTang'}, age:17, book:{name:'玩转JavaScript', price: 99}}
]);
db.person.find();
关于 @project:
db.person.aggregate([
{
$project:{
_id:0,
clientName: '$name.firstName',
clientAge: '$age'
}
}
]);
聚合表达式
字段路径表达式
$<filed>: 使用$来指示字段路径$<filed>.<sub-field>: 使用$和.来指示内嵌文档字段路径
字段路径表达式示例
- $name
- $book.name
注意点
$project 修改的是结果集而不是原有的集合
db.person.aggregate([
{
$project:{
_id:0,
myName: '$name.lastName'
}
}
]);
db.person.find();
如果在 @project 聚合操作中使用了原有文档不存在的字段, 那么会自动用
Null来填充
_id: 0的含义就是说 _id 这个字段不展示,可以告诉它那些字段需要显示那些字段不需要显示
db.person.aggregate([
{
$project:{
_id:0,
fullName: ['$name.firstName', '$name.middleName','$name.lastName'],
clientAge: '$age'
}
}
]);


浙公网安备 33010602011771号