数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)

数据库管理271期 2024-12-14

  • 数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)
    • 1 初始化数据
      • 1.1 创建用户
      • 1.2 导入数据
      • 1.3 创建JSON关系二元性视图
    • 2 创建ORDS服务
      • 2.1 下载JDK17
      • 2.2 安装ORDS
      • 2.3 启用MongoDB API
      • 2.4 启动ORDS
      • 2.5 创建ORDS服务
    • 3 CURL操作JSON关系二元性视图
      • 3.1 简单查询
      • 3.2 复杂查询
      • 3.3 基于_id查询
      • 3.4 插入数据
      • 3.5 修改数据
      • 3.6 删除操作
    • 4 MongoDB客户端操作JSON关系二元性视图
    • 总结

数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家,数盟会长老会成员,OCM讲师,PolarDB开源社区、青学会MOP社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

JSON关系二元性视图是Oracle 23c/23ai引入的一个非常厉害的新特性(具体可以查看第184和185期),本期使用的数据也是源自于184、185期,使用curl来操作JSON关系二元性视图

1 初始化数据

和270期对AI的数据库一致,数据库基本连接信息为:10.10.10.31:1521/pdbprod1(PDB)。

1.1 创建用户

alter session set container=pdbprod1;
create user mongo identified by mongo;
grant DB_DEVELOPER_ROLE to mongo;
alter user mongo default tablespace users quota unlimited on users;

1.2 导入数据

conn mongo/mongo@10.10.10.31:1521/pdbprod1
--建表语句和数据插入详见184、185期

1.3 创建JSON关系二元性视图

这里只创建订单维度的视图:

CREATE or REPLACE JSON DUALITY VIEW orders_jdv AS
orders @insert @update @delete
{_id          : order_id,ordertime    : order_time,customers @unnest @insert @update{cid        : customer_id,customer   : customer_name},details      : order_details @insert @update @delete[ {subid       : sub_idproducts @insert @update{pn        : product_id,pname     : product_name,price     : price_number,       product_type @unnest @insert @update{typeid  : type_id,type    : type_name}}} ]
};

image.png

2 创建ORDS服务

Oracle REST Data Services (ORDS) 让您的Oracle数据库启用HTTPS功能。作为一个中间层Java应用,ORDS提供了数据库管理REST API、SQL Developer Web、PL/SQL网关和适用于REST的SODA,并且支持发布RESTful Web服务,可与Oracle数据库中的数据和存储过程进行交互。这里也是用ORDS服务来对接JSON关系二元性视图。

2.1 下载JDK17

JDK17下载地址(使用JDK 17.0.12):https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

tar -xvf jdk-17.0.12_linux-x64_bin.tar.gz
echo -e 'export JAVA_HOME=/home/oracle/jdk-17.0.12' >> ~/.bash_profile

2.2 安装ORDS

ORDS下载地址为(使用最新版24.4):https://www.oracle.com/cn/database/sqldeveloper/technologies/db-actions/download/

mkdir ords/
mv ords-latest.zip ords/
cd ords/
unzip ords-latest.zipmkdir conf/echo -e 'export PATH="$PATH:/home/oracle/ords/bin"' >> ~/.bash_profile
echo -e 'export ORDS_CONFIG=/home/oracle/ords/conf' >> ~/.bash_profileords install

需要数据库的相关信息:
image.png
这时会启动ORDS,Ctrl+C终止即可:
image.png

2.3 启用MongoDB API

ords config set mongo.enabled true
ords config set mongo.tls false

2.4 启动ORDS

ords serve

在这里插入图片描述

这里会输出一些启动日志,包括REST API的端口,以及MongoDB客户端连接到数据库的字符串。

2.5 创建ORDS服务

grant soda_app to mongo;
conn mongo/mongo@10.10.10.31:1521/pdbprod1
exec ords.enable_schema;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGINORDS.ENABLE_OBJECT(p_enabled => TRUE,p_schema => 'MONGO',p_object => 'ORDERS_JDV',p_object_type => 'VIEW',p_object_alias => 'orders_jdv',p_auto_rest_auth => FALSE);commit;
END;
/ 

image.png

3 CURL操作JSON关系二元性视图

ORDS启动后,根据启动日志可以看到可以通过8080端口使用REST API操作JSON二元性视图。

3.1 简单查询

curl -s http://10.10.10.31:8080/ords/mongo/orders_jdv/ | jq .

image.png

curl -s 'http://10.10.10.31:8080/ords/mongo/orders_jdv/?offset=3&limit=1' | jq .

image.png

3.2 复杂查询

curl -s --globoff 'http://10.10.10.31:8080/ords/mongo/orders_jdv/?filter={"details":"$elemMatch":{{"products.pname":"pork"}}}' | jq .

这里可以查出带有Pork为商品的订单(这里不全截图了):
image.png
image.png

3.3 基于_id查询

curl -s http://10.10.10.31:8080/ords/mongo/orders_jdv/12345681 | jq .

image.png

3.4 插入数据

curl -s -X POST 'http://10.10.10.31:8080/ords/mongo/orders_jdv/' \
--header 'Content-Type: application/json' \
--data '{"_id": "123456786", "ordertime": "2024-12-13T13:33:33", "cid": "345678", "customer": "Haiwen","details": [{"subid": 21,"products": {"pn": 98765,"pname": "Laptop mode A","price": 2000,"typeid": 1234,"type": "computer"}},{"subid": 22,"products": {"pn": 87654,"pname": "CD A","price": 40,"typeid": 2345,"type": "music"}}]
}' | jq .

image.png
image.png
在关系表中也能查询到相关数据:
image.png

3.5 修改数据

curl -s -X PUT 'http://10.10.10.31:8080/ords/mongo/orders_jdv/123456786' \
--header 'Content-Type: application/json' \
--data '{"_id": "123456786", "_metadata" : {"etag" : "5F43B20AECD5EFF7CF022352530E3C75"},"ordertime": "2024-12-11T13:33:33", "cid": "345678", "customer": "Haiwen","details": [{"subid": 21,"products": {"pn": 76543,"pname": "Pork","price": 15,"typeid": 3456,"type": "food"}},{"subid": 22,"products": {"pn": 65432,"pname": "Oracle 23ai Document","price": 100,"typeid": 4567,"type": "book"}}]
}' | jq .

image.png
image.png
在关系表中也能查询到数据已变更:
image.png

3.6 删除操作

curl -s -X DELETE http://10.10.10.31:8080/ords/mongo/orders_jdv/123456786 | jq .

image.png
关系表中相关数据已删除:
image.png

4 MongoDB客户端操作JSON关系二元性视图

可以使用MongoDB官方提供的MongoDB Compass直接连接到Oracle 23ai的JSON关系二元性视图中。
image.png
image.png
由于前面已经使用CURL操作过,这里就不再使用MongoDB Compass进行操作演示了,连接字符串可以根据ORDS的启动日志获取,连接过程非常丝滑。

总结

本期演示了用使用MongoDB的方式来操作Oracle 23ai JSON关系二元性视图。
老规矩,知道写了些啥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计网_虚拟局域网VLAN

2024.12.08:计算机网络虚拟局域网VLAN学习笔记 虚拟局域网VLAN VLAN背景(认真看)VLAN定义(最大的好处是隔离广播域)VLAN以太网帧格式的扩展划分虚拟局域网VLAN的方式虚拟局域网的优点 VLAN背景(认真看&…

使用ENSP实现NAT(2)

一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置: 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…

Oracle PDB的开启和关闭

[生产环境关闭与开启Oracle PDB] 【运维场景】 在运维Oracle PDB的时候经常要开启和关闭PDB,对关闭和开启PDB的操作要非常熟悉。 【操作方法】 1. PDB的打开与关闭 关闭和开启DB的时候要看DB的警告日志,日志位置(在Oracle用户下查看&…

【树莓派4B】MindSpore lite 部署demo

一个demo,mindspore lite 部署在树莓派4B ubuntu22.04中,为后续操作开个门! 环境 开发环境:wsl-ubuntu22.04分发版部署环境:树莓派4B,操作系统为ubuntu22.04mindspore lite版本:mindspore-li…

第17天:信息收集-Web应用备案产权Whois反查域名枚举DNS记录证书特征相似查询

#知识点 1、信息收集-Web应用-机构产权&域名相关性 2、信息收集-Web应用-DNS&证书&枚举子域名 标签 名称 地址 企业信息 天眼查 天眼查-商业查询平台_企业信息查询_公司查询_工商查询_企业信用信息系统 企业信息 小蓝本 获客营销系统_ai智能拓客系统_企业获…

在循环群模运算中计算逆元

文章目录 一、算数模复合二、群 循环群1. 群 (Group)2. 环 (Ring)3. 循环群 (Cyclic Group)4. 多项式环 (Polynomial Ring)5. 有限域 (Finite Field)6. 椭圆曲线 (Elliptic Curve) 三、求逆元1. 扩展欧几里得算法1.1 算法概述1.2 步骤1.3 示例 2. 费马小定理 一、算数模复合 假…

Python使用Selenium库获取 网页节点元素、名称、内容的方法

我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…

M3DM的autodl环境构建过程笔记

文章目录 在3D-ADS环境https://blog.csdn.net/tfxzgp/article/details/144259472基础上构建M3DM(失败的记录,不用看)更换镜像重来(成功)安装缺少的包修改models.py中的RGB和点云backbone的路径修改main.py路径参数运行 在3D-ADS环境https://b…

Android 使用Overlay现实主题切换

最近项目上,想做一个主题切换的功能,整理了一下发布出来,主要使用的是IOverlayManager,大体思路如下: 1、想切换的应用,各自做overlay apk(简称皮肤包) 2、将overlay apk push 到v…

【原生js案例】如何实现一个穿透字体颜色的导航

普通的导航大家都会做,像这种穿透字体的导航应该很少见吧。高亮不是通过单独设置一个active类来设置字体高亮颜色,鼠标滑过导航项,字体可以部分是黑色,不分是白色,这种效果的实现 感兴趣的可以关注下我的系列课程【we…

IDEA 2023.3.6 下载、安装、激活与使用

一、IDEA2023.3.6下载 国际官网:https://www.jetbrains.com/ 国内官网:https://www.jetbrains.com.cn/ 如果国际官网无法访问,就使用国内官网,我们以国内官网为例下载IDEA2023.3.6 首先进入首页如下图&#xf…

ip_done

文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS,以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器 2.为什么要这样呢?? IP地…

深度学习作业 - 作业十一 - LSTM

问题一 推导LSTM网络中参数的梯度,并的分析其避免梯度消失的效果 LSTM网络是为了解简单RNN中存在的长程依赖问题而提出的一种新型网络结构,其主要思想是通过引入门控机制来控制数据的流通,门控机制包括输入门、遗忘门与输出门,同…

医院与医疗设备供应商网络安全事故综述

医院与医疗设备供应商网络安全事故综述 在医疗行业中,医院和医疗设备供应商的网络安全问题同样不容忽视。以下是一些近年来发生的重大网络安全事故的总结: 1. 德国杜塞尔多夫大学医院勒索软件攻击(2020年) 事件描述&#xff1a…

修改vscode中emmet中jsx和tsx语法中className的扩展符号从单引号到双引号 - HTML代码补全 - 单引号双引号

效果图 实现步骤 文件 > 首选项 > 设置搜索“”在settings.json中修改,增加 "emmet.syntaxProfiles": {"html": {"attr_quotes": "single"},"jsx": {"attr_quotes": "double","…

从0到1实现vue3+vite++elementuiPlus+ts的后台管理系统(一)

前言:从这篇文章开始实现vue3vite的后台管理系统,记录下自己搭建后台系统图的过程。 这篇文章完成项目的初始化和基本配置,这一步可以直接跟着vue3官网进行。整个系列只有前端部分,不涉及后端。 vue3官网:https://cn.…

JavaEE初阶——多线程(线程安全-锁)

复习上节内容(部分-掌握程度不够的) 加锁,解决线程安全问题。 synchronized关键字,对锁对象进行加锁。 锁对象,可以是随便一个Object对象(或者其子类的对象),需要关注的是&#xff…

如何在NGINX中实现基于IP的访问控制(IP黑白名单)?

大家好,我是锋哥。今天分享关于【如何在NGINX中实现基于IP的访问控制(IP黑白名单)?】面试题。希望对大家有帮助; 如何在NGINX中实现基于IP的访问控制(IP黑白名单)? 1000道 互联网大…

Docker--Docker Registry(镜像仓库)

什么是Docker Registry? 镜像仓库(Docker Registry)是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像,这些镜像包含了应用程序及其相关的依赖项和配置,是构建和运行Doc…

微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列

参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子&#xff0c;但并不完整&#xff0c;根据上述代码&#xff0c;进行修改完善&#xff0c;实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…