
文章插图
其特点&优势包括:
● 从客户端加密敏感数据,只有客户端拥有加密密钥 。
● 数据在整个生命周期(传输、存储、使用、审计或备份)中都是加密的 。
【MongoDB 6.0 新特性概览】● 客户端可以直接对加密数据进行丰富的查询(等值匹配、范围、前后缀、子字符串等查询类型) 。
● 强大的数据隐私保护能力,只有能访问客户端应用程序和加密密钥的授权用户才能看到明文数据 。
● 更轻量化的应用程序开发,涉及敏感数据的开发者无需考虑太多安全、合规的事情,数据库直接提供综合加密解决方案 。
● 降低敏感数据上云的安全顾虑 。
值得一提的是,可查询加密功能依然是预览(Preview)版本,不建议直接在生产环境使用 。社区版不支持客户端字段级加密(Client-Slide Field Level Encryption)的自动加密,可以使用显示加密(需要使用驱动的加密库lib) 。
聚合功能MongoDB的聚合功能允许用户处理多个文档并返回计算结果 。通过将多个操作符组合到聚合管道中,用户可以构建出足够复杂的数据处理管道以提取数据并进行分析 。MongoDB 6.0持续在聚合功能上深耕,带来了一些新的功能以及优化,包括:
● 改进了$lookup对JOINS的支持;
● 改进了$graphlookup 对图遍历的支持;
● $lookup和$graphlookup 支持分片集群;
● $lookup性能提升(部分场景可达百倍) 。
Query新增了一些查询操作符的支持 。比如$maxN、$topN、$minN、$bottomN、$lastN、$sortArrary等 。主要目的是利用操作符算子将更多的计算从业务中下沉到数据库中,使得业务层更加轻量化 。这些$xxxN可以看做对原本$min/$max/$last操作符的补充,用户可以视实际业务场景中需要返回一个或者多个结果来使用不同的操作符 。
以$maxN为例,其既可以被使用在数组中,也可以集成进聚合语句的管道中 。
# 用作arrary中db.scores.insertMany([{ "playerId" : 1, "score" : [ 1, 2, 3 ] },{ "playerId" : 2, "score" : [ 12, 90, 7, 89, 8 ] },{ "playerId" : 3, "score" : [ null ] },{ "playerId" : 4, "score" : [ ] }{ "playerId" : 5, "score" : [ 1293, "2", 3489, 9 ]}])# 给每个文档增加新的字段,保留最大的2个分数db.scores.aggregate([{ $addFields: { maxScores: { $maxN: { n: 2, input: "$score" } } } }])# 用在聚合pipeline中db.gamescores.insertMany([{ playerId: "PlayerA", gameId: "G1", score: 31 },{ playerId: "PlayerB", gameId: "G1", score: 33 },{ playerId: "PlayerC", gameId: "G1", score: 99 },{ playerId: "PlayerD", gameId: "G1", score: 1 },{ playerId: "PlayerA", gameId: "G2", score: 10 },{ playerId: "PlayerB", gameId: "G2", score: 14 },{ playerId: "PlayerC", gameId: "G2", score: 66 },{ playerId: "PlayerD", gameId: "G2", score: 80 }])# 找到单个游戏的3个高分db.gamescores.aggregate( [{$match : { gameId : "G1" }},{$group:{_id: "$gameId",maxThreeScores:{$maxN:{input: ["$score","$playerId"],n:3}}}}] )$maxN和$topN看起来有些重复,实则各有不同的使用场景 。topN会返回排序后的结果,而maxN则并不依赖特定的排序规则 。$sortArrary则强化了数组内是若干子对象场景下的排序,用户可以指定任意一个子文档内的字段、嵌套字段或者复合字段来按需进行数组的排序 。该操作符可以有效简化部分带数组排序的复合聚合查询 。
db.engineers.insertOne({"team":[{"name": "pat","age": 30,"address": { "street": "12 Baker St", "city": "London" }},{"name": "dallas","age": 36,"address": { "street": "12 Cowper St", "city": "Palo Alto" }},{"name": "charlie","age": 42,"address": { "street": "12 French St", "city": "New Brunswick" }}]})# 多种查询方式db.engineers.aggregate( [{ $project:{_id: 0,result:{$sortArray: { input: "$team", sortBy: { name: 1 } }}}}] )db.engineers.aggregate( [{ $project:{_id: 0,result:{$sortArray: { input: "$team", sortBy: { age: -1, name: 1 } }}}}] )db.engineers.aggregate( [{ $project:{_id: 0,result:{$sortArray: { input: "$team", sortBy: { "address.city": -1 }}}}] )更多细节请查阅相关查询操作符的官方文档 。
推荐阅读
- TypeScript 4.9 发布!重点新特性解读
- 余生请多指教|《余生》开分6.0,为什么男主粉喊话“低了”,女主粉则比较满意?
- 豆瓣|《余生请多指教》豆瓣开分6.0,打分人数引争议,网友:手速慢了
- 肖战|《余生,请多指教》豆瓣开分6.0,平台疑锁分,肖战作品平均分仅5.3
- 豆瓣|《余生请多指教》豆瓣开分6.0,一星比五星还多,合理吗?
- 音乐|六年内最大更新!酷我音乐发布车载6.0版:UI全变了
- 虚拟机|免费开源虚拟机Virtual Box大升级:支持Linux内核6.0
- 安卓|8月30日登场!ColorOS 13新特性爆料汇总
- Android 13 新特性:1 小时后自动清理剪贴板内容
- 安卓|安卓13正式版发布并开源!一文了解新特性
