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 @   BNTang  阅读(720)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示