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'
        }
    }
]);

image-20220723155356785

posted @ 2022-07-23 11:39  BNTang  阅读(744)  评论(0)    收藏  举报