MongoDB——视图操作
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——视图操作相关的知识,希望对你有一定的参考价值。
目录
一、MongoDB视图的概述
- MongoDB视图是一个可查询的对象,它的内容由其他集合或视图上的聚合管道定义。
- MongoDB不会将视图内容持久化到磁盘。 当客户端查询视图时,视图的内容按需计算。
- MongoDB可以要求客户端具有查询视图的权限。 MongoDB不支持对视图进行写操作。
二、MongoDB视图的作用
- 数据抽象;
- 保护敏感数据的一种方法;
- 将敏感数据投影到视图之外;
- 只读;
- 结合基于角色的授权,可按角色访问信息。
三、数据准备
-
准备数据集,执行脚本
var orders = new Array(); var shipping = new Array(); var addresses = ["广西省玉林市", "湖南省岳阳市", "湖北省荆州市", "甘肃省兰州市", "吉林省松原市", "江西省景德镇", "辽宁省沈阳市", "福建省厦门市", "广东省广州市", "北京市朝阳区"]; for (var i = 10000; i < 20000; i++) var orderNo = i + Math.random().toString().substr(2, 5); orders[i] = orderNo: orderNo, userId: i, price: Math.round(Math.random() * 10000) / 100, qty: Math.floor(Math.random() * 10) + 1, orderTime: new Date(new Date().setSeconds(Math.floor(Math.random() * 10000))) ; var address = addresses[Math.floor(Math.random() * 10)]; shipping[i] = orderNo: orderNo, address: address, recipienter: "Wilson", province: address.substr(0, 3), city: address.substr(3, 3) db.order.insert(orders); db.shipping.insert(shipping);
-
查询order集合中的数据,查看是否初始化数据成功
> db.order.find()
-
查询order集合中的数据,查看是否初始化数据成功
> db.shipping.find()
四、创建视图
4.1、创建视图的基本语法格式
-
创建视图的基本语法格式
db.createView( "<viewName>", "<source>", [<pipeline>], "collation" : <collation> )
4.2、创建视图的语法解释
-
创建视图的语法解释
函数 解释 viewName 必须,视图名称 source 必须,数据源,集合/视图 [] 可选,一组管道 collation 可选,排序规则
4.3、单个集合创建视图的示例
-
查看当天最高的10笔订单视图,需要实时显示金额最高的订单
db.createView( "orderInfo", //视图名称 "order", //数据源 [ //筛选符合条件的订单,大于当天,这里要注意时区 $match: "orderTime": $gte: ISODate("2022-01-26T00:00:00.000Z") , //按金额倒序 $sort: "price": -1 , //限制10个文档 $limit: 10 , //选择要显示的字段 //0: 排除字段,若字段上使用(_id除外),就不能有其他包含字段 //1: 包含字段 $project: _id: 0, orderNo: 1, price: 1, orderTime: 1 ] )
-
查询orderInfo视图中的数据
> db.orderInfo.find()
4.4、多个集合创建视图的示例
-
跟单个集合是一样,只是多了$lookup连接操作符,视图根据管道最终结果显示,所以可以关联多个集合
-
根据订单编号关联查询订单编号、订单价格和物流地址
db.createView( "orderDetail", //视图名称 "order", //数据源 [ $lookup: from: "shipping", localField: "orderNo", foreignField: "orderNo", as: "shipping" , $project: "orderNo": 1, "price": 1, "shipping.address": 1 ] )
-
查询orderDetail视图中的数据
五、修改视图
5.1、修建视图的基本语法格式
-
修建视图的基本语法格式
db.runCommand( collMod: "<viewName>", viewOn: "<source>", pipeline:[<pipeline>], "collation" : <collation> )
5.2、修建视图的语法解释
-
修建视图的语法解释
函数 解释 viewName 必须,视图名称 source 必须,数据源,集合/视图 [] 可选,一组管道 collation 可选,排序规则
5.3、修建视图的示例
-
修改第4步中单个集合创建的orderInfo视图
db.runCommand( collMod: "orderInfo", viewOn: "order", pipeline: [ $match: "orderTime": $gte: ISODate("2020-04-13T16:00:00.000Z") , $sort: "price": -1 , $limit: 10 , $project: _id: 0, orderNo: 1, price: 1, qty: 1, orderTime: 1 ] )
-
查询修改后的orderInfo视图数据
> db.orderInfo.find()
六、删除视图
-
删除orderInfo视图
db.orderInfo.drop();
-
查询删除后的orderInfo视图数据
> db.orderInfo.find()
以上是关于MongoDB——视图操作的主要内容,如果未能解决你的问题,请参考以下文章