专栏首页mySoul明了 | MongoDB 外键的基本使用
原创

明了 | 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的外键。

这样就完成了对数据库的外键操作。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MyBatis 缓存

    在执行add,update,delete 的时候,会自动清空缓存,避免脏读造成的影响

    mySoul
  • DOM概述 选取文档元素

    有些html标签会有name元素,区别于id,name属性的值不必是唯一的,多个元素可能存在相同的名字。

    mySoul
  • MyBatis 映射器

    mySoul
  • 浅尝辄止MongoDB:GridFS

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1148526
  • ASP.NET Core 生成验证码

    使用验证码保护网站免受垃圾信息的选择有很多,比如Google ReCaptcha和captcha.com。这两者都可以整合到ASP.NET Core应用中去。然...

    Edi Wang
  • 搜索引擎的预料库 —— 万恶的爬虫

    本节我们来生产一个简单的语料库 —— 从果壳网爬点文章。后面我们将使用这些文章来完成索引构建和关键词查询功能。

    老钱
  • SpringBoot使用Redis做缓存结合自带注解

    HUC思梦
  • MongoDB初探第二篇 (r4笔记第82天)

    与sql语句的简单对比 在第一篇中分享了一些MongoDB的基本知识点,因为安装运行其实都还是很轻巧的,所以对于大家上手来说应该问题不大,但是安装完成,数据库也...

    jeanron100
  • three.js 学习感悟

    在Three.js中添加的物体都是添加到场景中的,因此它相当于一个大容器。一般说,场景来没有很复杂的操作,在程序最开始的时候进行实例化,然后将物体添加到场景中即...

    山河木马
  • 【SSH快速进阶】——Hibernate 多对多映射

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

    DannyHoo

扫码关注云+社区

领取腾讯云代金券