• 6.视图


    介绍

    MongoDB视图是一个可查询的对象,它的内容由其他集合或视图上的聚合管道定义。 MongoDB不会将 视图内容持久化到磁盘。 当客户端查询视图时,视图的内容按需计算。 MongoDB可以要求客户端具有 查询视图的权限。 MongoDB不支持对视图进行写操作。

    作用:

    • 数据抽象
    • 保护敏感数据的一种方法
    • 将敏感数据投影到视图之外
    • 只读
    • 结合基于角色的授权,可按角色访问信息

    创建视图

    db.createView(
        "<viewName>", #viewName : 必须,视图名称
        "<source>", #source : 必须,数据源,集合/视图
        [<pipeline>], #[] : 可选,一组管道
        {
        	"collation" : { <collation> } #可选,排序规则
        }
    )
    

    单个集合创建视图

    假设现在查看当天最高的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 } }
        ]
    )
    
    

    多个集合创建视图

    跟单个是集合是一样,只是多了$lookup连接操作符,视图根据管道最终结果显示,所以可以关联多个 集合

    db.orderDetail.drop()
    db.createView(
        "orderDetail",
        "order",
        [
            { $lookup: 
            	{ 
            	from: "shipping", 
            	localField: "orderNo", 
            	foreignField:"orderNo", 
            	as: "shipping" 
            	} 
            },
            { $project: { "orderNo": 1, "price": 1, "shipping.address": 1 } }
        ]
    )
    
    

    修改视图

    db.runCommand({
        collMod: "orderInfo",
        viewOn: "order",
        pipeline: [
        { $match: { "orderTime": { $gte: ISODate("2020-04-13T16:00:00.000Z") } }},
        { $sort: { "price": -1 } },
        { $limit: 10 },
        //增加qty
        { $project: { _id: 0, orderNo: 1, price: 1, qty: 1, orderTime: 1 } }
        ]
    })
    	
    

    删除视图

    db.orderInfo.drop();
    

    参考<图灵课堂>

  • 相关阅读:
    两个静态的页面嵌入动态页面进行传值
    网页滚动图片窗
    最近用VS2008SP1+ .NET Framework3.5SP1开发程序,使用了MsChart,但是部署到服务器的时候提示如下错误:
    使用ajax的登录页面
    动态创建DataTable
    滚动信息
    通过Web Services上传和下载文件
    弹出窗体
    ajax开源网址
    jQuery图片滚动十佳插件重点介绍
  • 原文地址:https://www.cnblogs.com/rb2010/p/16048721.html
Copyright © 2020-2023  润新知