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();
参考<图灵课堂>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)