MongoDB使用$project投射表达式查询

😊 @ 作者: 一恍过去
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: MongoDB使用$project投射表达式查询

在这里插入图片描述

前言

$project为投射查询 ,即将一个数据结果映射为另一个结果 过程中可以对某些数据进行修改 控制其最终显示的结果。

通过使用$project操作符,您可以根据需要精确控制聚合操作输出文档的结构。它能够帮助您从聚合管道中提取所需的字段,对字段进行重命名、计算和过滤,以满足数据处理和查询的需求。同时,使用$project还可以减少传输的数据量,提高查询的效率。

$project操作符可以完成以下几个任务:

  • 字段选择: 通过在$project中指定字段名称,可以选择输出文档中要包含的字段。只有指定的字段会在输出文档中出现,其他字段将被排除。
  • 字段重命名: 在$project中,可以使用表达式对字段进行重命名。通过指定新的字段名,并将原始字段的值赋给新字段,可以在输出文档中改变字段名称。
  • 计算表达式: $project支持使用各种表达式对字段进行计算和转换。您可以在$project中使用算术运算符、逻辑运算符、条件运算符和聚合运算符等来对字段进行计算和转换。这使得您可以在输出文档中生成新的计算字段。
  • 字段的显示与隐藏: $project还允许您通过设置字段的值为1或0来控制字段的显示与隐藏。将字段设置为1将显示该字段,将字段设置为0将隐藏该字段

1、原字段查询

原字段查询,_id-默认显示,0-表示不显示,1-表示显示,如何只是原字段查询和find()一致

# 比如:select userid,price from test
db.test.aggregate(
	{"$project":{
  	  "_id":0,
	  "userid":1,
      "price":1,
    }})

效果:
在这里插入图片描述

2、数学表达式查询

数学表达式查询,类型如下:
{"$add":[expr1,expr2,...,exprN]} #相加
{"$subtract":[expr1,expr2]} #第一个减第二个
{"$multiply":[expr1,expr2,...,exprN]} #相乘
{"$divide":[expr1,expr2]} #第一个表达式除以第二个表达式的商作为结果
{"$mod":[expr1,expr2]} #第一个表达式除以第二个表达式得到的余数作为结果

注意:expr可以为字段也可以为具体数值,可以多个表达式一起使用。

效果:
在这里插入图片描述

3、日期表达查询

日期表达查询:$year,$month,$week,$dayOfMonth,$dayOfWeek,$dayOfYear,$hour,$minute,$second,可以多个组合,实际上就是对字段使用日期函数。

db.test.aggregate(
	{
    "$project":{
        "userid":1,
        "new_year":{
            "$year":"$create_date"
        },
        "day":{
            "$dayOfWeek":"$create_date"
        },
        "month":{
            "$month":"$create_date"
        }
    }
})

效果:
在这里插入图片描述
比如:求时间差:

db.test.aggregate(
	{"$project":{"name":1,"new_minute":{
        "$subtract":[
            {"$minute":new Date()},
            {"$minute":"$create_date"}
        ]
    }}}
)

效果:
在这里插入图片描述

4、字符串表达式查询

常用类型如下:
{"$substr":[自定义字符串|$字段名,起始位置,截取几个字节]}
{"$concat":[expr1,expr2,...,exprN]} #指定的表达式或字符串连接在一起返回,只支持字符串拼接
{"$toLower":expr}
{"$toUpper":expr}

截取字段:

db.test.aggregate( {"$project":{"str":{"$substr":["$price",0,1]}}})

在这里插入图片描述

截取自定义字符串:

db.test.aggregate( {"$project":{"str":{"$substr":["abcdef",1,2]}}})

在这里插入图片描述

拼接字段:

db.test.aggregate( {"$project":{"str":{"$concat":["$userid","1","2"]}}})

在这里插入图片描述

拼接字符串:

db.test.aggregate( {"$project":{"str":{"$concat":["abc","1","2"]}}})

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一恍过去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值