明了 | MongoDB 外键的基本使用

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 小小继续进行学习,这次学习的内容是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数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
6月前
|
NoSQL 关系型数据库 MySQL
Linux平台下安装部署MongoDB数据库及基本使用(1)
Linux平台下安装部署MongoDB数据库及基本使用(1)
253 0
|
9月前
|
NoSQL MongoDB 数据库
Mongodb的基本使用
Mongodb的基本使用
128 0
|
9月前
|
存储 JSON NoSQL
【mongo 系列】mongodb 学习二,mongodb 的基本使用梳理
• 文档 是 mongodb 的最小数据集单位,是多个键值对有序租户在一起的数据单元,类似于关系型数据库的记录
198 4
|
存储 NoSQL Ubuntu
MongoDB的「Linux」安装及基本使用
MongoDB的「Linux」安装及基本使用
894 0
MongoDB的「Linux」安装及基本使用
|
NoSQL MongoDB 数据库
Mongodb数据库的基本使用
Mongodb数据库的基本使用
183 1
|
NoSQL 关系型数据库 MySQL
SpringBoot高级篇MongoDB之修改基本使用姿势
本篇依然是MongoDB curd中的一篇,主要介绍document的更新,主要内容如下 常见类型成员的修改 数组类型成员的增删改 document类型成员的增删改
495 0
|
NoSQL 数据库 索引
|
NoSQL 数据库 MongoDB
MongoDB的基本使用
use library 使用use函数切换已有的数据库或创建新的数据库   show dbs 查看MongoDB中目前所有可用的数据库   show collections 查看当前数据库中的所有集合   在集合中插入数据 >document = ({"Type":"Book","Title":"Definitive Guide to MongoDB 2nd ed.
618 0
|
3天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
24 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答