明了 | MongoDB 外键的基本使用
时间:2022-07-22
本文章向大家介绍明了 | MongoDB 外键的基本使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
小小继续进行学习,这次学习的内容是MongoDB外键的基本使用。
表示表关系的方法
在传统的关系型数据库当中,表示表关系,数据是通过索引来完善。
而在MongoDB中,表示表关系,使用的是嵌套,即,一个文档嵌套一个文档的方法,作为MongoDB的两个文档的关联,以及使用,reference link作为文档和文档之间的关联。
文档嵌套
使用可视化的
这里使用可视化的编辑器作为文档嵌套
输入以下的文档对象
{
"ming": "ming",
"ming2": {
"ming3": "ming8"
}
}
插入成功以后如下
这样就完成了文档的嵌套,即,表示两个文档之间的关联。
使用JDK
这里使用JDK进行连接。
首先添加依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.5.0</version>
</dependency>
进行连接
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "106.53.115.12" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("koa");
System.out.println("Connect to database successfully");
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
进行插入
List<Document> collections = new ArrayList<Document>();
Document d1 = new Document();
d1.append("name", "三国演义").append("author", "罗贯中");
Document d2 = new Document();
d2.append("name", "红楼梦").append("author", d1);
collections.add(d2);
c.insertMany(collections);
查询出来的数据如下
{
"name" : "红楼梦",
"author": {
"name": "三国演义",
"author": "罗贯中"
}
}
此时就完成了文档的嵌套操作
外键查询
使用js语言,进行查询关联
这里使用new DBRef的方式做外键查询。
此时对于DBRef具有以下字段。
$ref
该$ref字段包含引用文档所在的集合的名称。
$id
该$id字段包含_id引用文档中字段的值。
$db
可选的。包含引用文档所在的数据库的名称。只有一些驱动程序支持$db引用,该字段说明可以跨集合关联
这里对集合操作关联如下
// 保存集合的数据
> var a={value:"1"}
> var b={value:"2"}
> var c={value:"9"}
> var d={value:"10"}
> db.A.save(a)
> db.A.save(b)
> db.A.save(c)
> db.A.save(d)
// 进行集合数据的查询
> db.A.find()
{ "_id" : ObjectId("4e3f33ab6266b5845052c02b"), "value" : "1" }
{ "_id" : ObjectId("4e3f33de6266b5845052c02c"), "value" : "2" }
{ "_id" : ObjectId("4e3f33e06266b5845052c02d"), "value" : "9" }
{ "_id" : ObjectId("4e3f33e26266b5845052c02e"), "value" : "10" }
进行集合关联,这里使用 new DBRef 方式完成集合的关联
// 通过添加new DBRef 关键字,完成对集合的关联,这里通过new DBRef作为关键字,其中A为key,ObjectId 为value,进行关联
> var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:3}
// 保存集合
> db.B.save(Ba)
> var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:4}
> db.B.insert(Ba)
> var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:7}
> db.B.insert(Ba)
> var Ba={Apid:[new DBRef('A',ObjectId("4e3f33de6266b5845052c02c"))],value:8}
> db.B.insert(Ba)
// 进行查询
> db.B.find()
// 可以看到,已经成功关联
{ "_id" : ObjectId("4e3f3dd96266b5845052c035"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 3 }
{ "_id" : ObjectId("4e3f3de16266b5845052c036"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 4 }
{ "_id" : ObjectId("4e3f3dec6266b5845052c037"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 7 }
{ "_id" : ObjectId("4e3f3df06266b5845052c038"), "Apid" : [ { "$ref" : "A", "$id" : ObjectId("4e3f33de6266b5845052c02c") } ], "value" : 8 }
使用mongo-java的方式操作
// 创建外键进行关联,其中外键为refB
// 其中选择对db数据库进行操作,选择id作为数据库的关联
DBRef refB = new DBRef(db,"transations", obj.get("_id"));
// 创建新的集合
DBObject subObj = new BasicDBObject();
// 外键插入
subObj.put("brand", refB);
// 进行保存
accounts.save(subObj);
查询的结果如下
可以看到其中$id 对应的值为其数据库mongodb的外键。
这样就完成了对数据库的外键操作。
- Python多元线性回归-sklearn.linear_model,并对其预测结果评估
- python 聚类分析实战案例:K-means算法(原理源码)
- JAVA面试题解惑——final、finally和finalize的区别
- Java内存管理
- python基础知识——内置数据结构(字典)
- mysql、mongodb、python(dataframe).聚合函数的形式,以及报错解决方案
- JavaScript计算水仙花数【可自定义范围】
- JSP简单入门(1)
- mongodb取出json,利用python转成dataframe(dict-to-dataframe)
- JSP简单入门(2)
- JSP简单入门(3)
- 物化视图相关的性能改进 (r7笔记第58天)
- Maven 核心原理解析(1)
- LeetCode——Two Sum
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【学不动了系列】之 Deno 入门 什么是Deno安装DenoDeno运行时(Runtime)Deno标准库第三方模块
- SAUI-瀑布流改版(grid)
- 深入分析 Spring 基于注解的 AOP 实现原理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 03 Spring Boot 整合Druid
- 关于字符串切割空格
- CSS浮动知识
- 你敢信?四行Python代码就能知道你那的天气!
- Ribbon核心组件IRule及负载均衡算法
- CSS标签显示模式及单行文本
- CSS复合选择器
- CSS重要的盒子模型
- CSS3圆角边框和盒子阴影
- 修改Mirages主题底部默认字体大小
- CSS字体字段样式