您当前的位置: 首页 >  mongodb

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB——视图操作

小志的博客 发布时间:2022-04-26 23:20:34 ,浏览量:0

目录
    • 一、MongoDB视图的概述
    • 二、MongoDB视图的作用
    • 三、数据准备
    • 四、创建视图
      • 4.1、创建视图的基本语法格式
      • 4.2、创建视图的语法解释
      • 4.3、单个集合创建视图的示例
      • 4.4、多个集合创建视图的示例
    • 五、修改视图
      • 5.1、修建视图的基本语法格式
      • 5.2、修建视图的语法解释
      • 5.3、修建视图的示例
    • 六、删除视图

一、MongoDB视图的概述
  • MongoDB视图是一个可查询的对象,它的内容由其他集合或视图上的聚合管道定义。
  • MongoDB不会将视图内容持久化到磁盘。 当客户端查询视图时,视图的内容按需计算。
  • MongoDB可以要求客户端具有查询视图的权限。 MongoDB不支持对视图进行写操作。
二、MongoDB视图的作用
  • 数据抽象;
  • 保护敏感数据的一种方法;
  • 将敏感数据投影到视图之外;
  • 只读;
  • 结合基于角色的授权,可按角色访问信息。
三、数据准备
  • 准备数据集,执行脚本

    var orders = new Array();
    var shipping = new Array();
    var addresses = ["广西省玉林市", "湖南省岳阳市", "湖北省荆州市", "甘肃省兰州市", "吉林省松原市", "江西省景德镇", "辽宁省沈阳市", "福建省厦门市", "广东省广州市", "北京市朝阳区"];
    for (var i = 10000; i  db.order.find()
    

    在这里插入图片描述

  • 查询order集合中的数据,查看是否初始化数据成功

    > db.shipping.find()
    

    在这里插入图片描述

四、创建视图 4.1、创建视图的基本语法格式
  • 创建视图的基本语法格式

    db.createView( 
    	"", 
    	"",
    	[], 
    	{ 
    		"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: "", 
    	viewOn: "",
    	pipeline:[], 
    	{ 
    		"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()
    

    在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0410s