数据库管理-第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背景(认真看&…

深入探索JavaScript网络编程:AJAX与Axios库的完美结合

深入探索JavaScript网络编程:AJAX与Axios库的完美结合 在现代Web开发中,网络编程是不可或缺的一部分。AJAX(Asynchronous JavaScript and XML)技术使得网页能够在不重新加载整个页面的情况下与服务器进行数据交换,从而…

使用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进…

lombok常用注解的功能和效果

官网:https://www.projectlombok.org github源码地址:https://github.com/rzwitserloot/lombok Lombok是一个Java库,它能通过注解的方式自动生成一些Java代码,从而减少代码冗余。以下是一些Lombok常用的注解: Data 功…

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…

LivePortrait 部署笔记

LivePortrait 开源地址: https://github.com/KwaiVGI/LivePortrait 模型下载: export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resume-download KwaiVGI/LivePortrait --local-dir models--KwaiVGI--LivePortrait

yarn修改缓存位置

查看缓存位置 以下三个命令分别为:bin是yarn存储命令的二进制文件,global存储全局node_modules ,cache存储用下下载缓存,查看本机目前的目录: 查看bin目录命令:yarn global bin 查看global目录命令&…

安卓 流量相关功能实现记录

1. 静态声明权限&#xff0c;在AndroidManifest.xml中申明 <uses-permission xmlns:tools"http://schemas.android.com/tools"android:name"android.permission.PACKAGE_USAGE_STATS"tools:ignore"ProtectedPermissions" /> 2.判断并动态…

第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库获取 网页节点元素、名称、内容的方法

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

M3DM的autodl环境构建过程笔记

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

Android 使用Overlay现实主题切换

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

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

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

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

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

ip_done

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

Unity 将数字1234转换为字母ABCD

需求如下&#xff1a; 数字1&#xff0c;转换后为&#xff1a;A 数字2&#xff0c;转换后为&#xff1a;B 数字3&#xff0c;转换后为&#xff1a;C 数字4&#xff0c;转换后为&#xff1a;D 数字123&#xff0c;转换后为&#xff1a;ABC C#实现代码如下&#xff1a; pri…

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

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

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

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