1表示要该字段,0表示不要该字段,也可以对返回的字段进行重命名,比如将title改为articleTitle,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …articleTitle":"title"}})
不过这里有一个问题需要注意,如果原字段上有索引,重命名之后的字段上就没有索引了,因此最好在重命名之前使用索引。
数学表达式
数学表达式可以用来对一组数值进行加减乘除取模,比如我的数据结构如下:
{
“_id” : ObjectId(“59f841f5b998d8acc7d08863”),
“orderAddressL” : “ShenZhen”,
“prodMoney” : 45.0,
“freight” : 13.0,
“discounts” : 3.0,
“orderDate” : ISODate(“2017-10-31T09:27:17.342Z”),
“prods” : [
“可乐”,
“奶茶”
]
}
订单的总费用为商品费用加上运费,查询如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …t:{totalMoney:{add:[“ p r o d M o n e y " , " prodMoney"," prodMoney","freight”]}}})
实际付款的费用是总费用减去折扣,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …ect:{totalPay:{subtract:[{ a d d : [ " add:[" add:["prodMoney",“KaTeX parse error: Expected 'EOF', got '}' at position 10: freight"]}̲,"discounts”]}}})
再来三个无厘头运算,比如计算prodMoney和freight和discounts的乘积:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …roject:{test1:{multiply:[“ p r o d M o n e y " , " prodMoney"," prodMoney","freight”,“$discounts”]}}})
再比如求 prodMoney和 p r o d M o n e y 和 prodMoney和freight的商,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …roject:{test1:{divide:[“ p r o d M o n e y " , " prodMoney"," prodMoney","freight”]}}})
再比如用 freight对 f r e i g h t 对 freight对prodMoney取模,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …roject:{test1:{mod:[“ p r o d M o n e y " , " prodMoney"," prodMoney","freight”]}}})
加法和乘法都可以接收多个参数,其余的都接收两个参数。
日期表达式
日期表达式可以从一个日期类型中提取出年、月、日、星期、时、分、秒等信息,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: project:{"年份":{year:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"月份":{month:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"一年中第几周":{week:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"日期":{dayOfMonth:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"星期":{dayOfWeek:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"一年中第几天":{dayOfYear:"KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"时":{hour:“KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"分":{minute:“KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"秒":{second:“KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"毫秒":{millisecond:“KaTeX parse error: Expected 'EOF', got '}' at position 11: orderDate"}̲,"自定义格式化时间":{dateToString:{format:”%Y年%m月%d %H:%M:%S”,date:”$orderDate”}}}})
执行结果如下:
{
“_id” : ObjectId(“59f841f5b998d8acc7d08861”),
“年份” : 2017,
“月份” : 10,
“一年中第几周” : 44,
“日期” : 31,
“星期” : 3,
“一年中第几天” : 304,
“时” : 9,
“分” : 27,
“秒” : 17,
“毫秒” : 342,
“自定义格式化时间” : “2017年10月31 09:27:17”
}
dayOfWeek返回的是星期,1表示星期天,7表示星期六, d a y O f W e e k 返 回 的 是 星 期 , 1 表 示 星 期 天 , 7 表 示 星 期 六 , dayOfWeek返回的是星期,1表示星期天,7表示星期六,week表示本周是本年的第几周,从0开始计。$dateToString是MongoDB3.0+中的功能。格式化的字符还有以下几种:
| 字符 | 含义 | 取值范围 |
| :-- | :-- | :-- |
| %Y | Year (4 digits, zero padded) | 0000-9999 |
| %m | Month (2 digits, zero padded) | 01-12 |
| %d | Day of Month (2 digits, zero padded) | 01-31 |
| %H | Hour (2 digits, zero padded, 24-hour clock) | 00-23 |
| %M | Minute (2 digits, zero padded) | 00-59 |
| %S | Second (2 digits, zero padded) | 00-60 |
| %L | Millisecond (3 digits, zero padded) | 000-999 |
| %j | Day of year (3 digits, zero padded) | 001-366 |
| %w | Day of week (1-Sunday, 7-Saturday) | 1-7 |
| %U | Week of year (2 digits, zero padded) | 00-53 |
字符串表达式
字符串表达式中有字符串的截取、拼接、转大写、转小写等操作,比如我截取orderAddressL前两个字符返回,如下:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: project:{addr:{substr:[“$orderAddressL”,0,2]}}})
再比如我将orderAddressL和orderDate拼接后返回:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: project:{addr:{concat:[“KaTeX parse error: Expected '}', got 'EOF' at end of input: …rderAddressL",{dateToString:{format:”–%Y年%m月%d",date:“$orderDate”}}]}}})
结果如下:
{
“_id” : ObjectId(“59f841f5b998d8acc7d08861”),
“addr” : “NanJing–2017年10月31”
}
再比如我将orderAddressL全部转为小写返回:
db.sang_collect.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: project:{addr:{toLower:“$orderAddressL”}}})
再比如我将orderAddressL全部转为大写返回:
复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
- 第三部分:性能调优(JVM+MySQL+Tomcat)
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
找小编(vip1024c)领取
通讯(MQ/kafka))
[外链图片转存中…(img-XYrfTvtD-1721718460144)]
[外链图片转存中…(img-AZTfBx1Z-1721718460145)]
[外链图片转存中…(img-dGysnNZ0-1721718460145)]
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
[外链图片转存中…(img-Sp4yFPAm-1721718460145)]
[外链图片转存中…(img-nnlODk87-1721718460146)]
找小编(vip1024c)领取