明了 | 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的外键。
这样就完成了对数据库的外键操作。
公众号
明了 | MongoDB 外键的基本使用相关推荐
- mysql 主键外键sql_SQL外键VS主键说明了MySQL语法示例
mysql 主键外键sql A Foreign Key is a key used to link two tables. The table with the Foreign Key Constra ...
- mysql 创建外键实例_mysql 外键创建实例
SQL FOREIGN KEY 外键实例教程 外国的SQL关键的制约因素 外键在一个表点,主键在另一就座. 让我们说明了外国钥匙与一个例子.看看以下两个表格: 在"人"表: Las ...
- oracle 列级外键,Oracle 中的外键与锁
文章目录算是接上篇吧... 内容主要来自 Oracle 官方文档,自己重新画了下图.图中配色来自大神 draveness 的文章,小清新的配色真是美美哒.看来我在学画图的路上还要修炼很久啊..... ...
- mysql 高版本检索外键_第05期:外键到底能不能用?
外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性. 外键在大部分企业写的开发规范里会直接规避掉!外键有优缺点,也并不是说每种场景都不适用,完全没有必要一刀切.外键到底能 ...
- oracle选择外键列,Oracle外键列上是否需要索引?
外键列上缺少索引会带来两个问题,限制并发性.影响性能.而这两个问题中的任意一个都可能会造成严重性能问题. 无论是Or 外键列上缺少索引会带来两个问题,限制并发性.影响性能.而这两个问题中的任意一个都可 ...
- oracle 列级外键,Oracle外键列上是否需要索引?
外键列上缺少索引会带来两个问题,限制并发性.影响性能.而这两个问题中的任意一个都可能会造成严重性能问题. 无论是Or 外键列上缺少索引会带来两个问题,限制并发性.影响性能.而这两个问题中的任意一个都可 ...
- 数据库-MySQL-数据库设计-外键
外键 一:首先是外键的定义 如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键:换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R ...
- django外键和多数据库应用
为什么80%的码农都做不了架构师?>>> 模型中如果有外键和多对多字段,创建的时候外键必须首先绑定,然后保存,才能添加多对多字段. from django.db import ...
- mysql即是主键又是外键怎么写_数据库 既是主键又是外键
数据蒋堂 | JOIN延伸 - 维度概念 谈到数据分析时常常会用到维度这个词,针对数据立方体的钻取.旋转.切片等操作都是围绕维度进行的,几乎所有的数据分析人员都知道并会运用这个术语,但要问及它的定义, ...
最新文章
- 机器学习(MACHINE LEARNING)MATLAB模拟排队论
- 安装pipenv搭建虚拟环境做flask
- JavaScript eval() 函数的用法
- ant 安装及基础教程 !
- 成都东万计算机学校,东兴区东方科技职业技术学校
- 【转】Azure云存储及存储账户概述***
- 爱护身体之简易程序员健身操
- mimimiaaaaaa
- 讯飞输入法将深度神经网络DNN技术应用于语音识别达到业界领先水平
- 全国计算机三级网络技术题库南开,计算机三级网络技术机题库_及答案(南开100题).doc...
- fid和is_【深度学习】生成式对抗网络(GAN)的常见评价指标:IS/FID/JS散度
- 人机交互-语音交互的优势和劣势
- 趣谈充电IC的电源路径管理功能
- 教你快速搭建个人网站
- 共射级三极管放大电路与其饱和失真与截止失真的分析
- 机器学习笔记21——决策树之CART算法原理及python实现案例
- JavaScript swiper
- centos 8 使用 nmcli 配置网桥Bridge(最后有踩坑过程)
- OSChina 周二乱弹 ——程序员在聊天中注意观察什么细节
- cropper.js 裁剪图片并上传(文档翻译+demo)(转)