加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mongodb 实现连接查询

发布时间:2020-12-13 12:42:18 所属栏目:百科 来源:网络整理
导读:《mongodb 实现连接查询》要点: 本文介绍了mongodb 实现连接查询,希望对您有用。如果有疑问,可以联系我们。 今天我们学习下DBRef的使用,用过mongodb的都知道mongodb不能做关联查询,关系型数据库中是可以的,当然我们不要用关系型数据库的思想来用nosql. 但

《mongodb 实现连接查询》要点:
本文介绍了mongodb 实现连接查询,希望对您有用。如果有疑问,可以联系我们。

今天我们学习下DBRef的使用,用过mongodb的都知道mongodb不能做关联查询,关系型数据库中是可以的,当然我们不要用关系型数据库的思想来用nosql.

但是实际应用中也是会有类似的需求的.

我们就以学生和班级的关系来讲解一对一以及一对多的关联操作.

  • 一个班级有多个学生,班级对学生是一对多的关系

  • 一个学生属于一个班级,学生对班级是一对一的关系

如果用mysql那么就是下面2张表: 班级表: classId className 学生表: studentId studentName classId

查询学生信息带出班级信息的查询也方便

mongodb 实现连接查询

用mongodb要如何设计集合呢???

班级集合中嵌套学生信息:

mongodb 实现连接查询

上面的嵌套在学生数量有限的情况下是可以的,如果量大超过16M的时候就不适用了,学生有很多信息,我这边只列了简单的.

为了减少文档的大小,那么能不能像mysql一样,之存储id然后做关联呢?

在mongodb中可以使用DBRef来关联

定义要用到的实体类

mongodb 实现连接查询

保存数据的时候先保存班级数据,班级有了学生对象中的班级才能引用到,因为引用是通过_id来的.

我们可以看到保存后的数据在学生集合中有DBRef引用class中的57fa4b99d4c68bb7d044d616

mongodb 实现连接查询

然后我们查询这个学生的信息就可以自动带出班级的信息了,用过hibernate的一看就知道哈..

mongodb 实现连接查询

上面将的是一对一的操作,一对多的话就比较麻烦了

mongodb 实现连接查询

我们看上面这段代码,大家觉得这段代码能执行成功吗?不能...

上面也说了,引用一定要引用已经插入到数据的数据.

这边先保存学生信息,学生中引用了班级,班级还没保存

先保存班级信息的话,班级中引用了学生,学生此时还没保存

如果引用没保存的信息就会报错

mongodb 实现连接查询

这样不行,我们就只能曲线救国了

从业务上来说首先肯定是开班级,班级有了再招生

我们就利用上面已经存在的五年级一班来添加学生

mongodb 实现连接查询

在李学生加入班级后,马上把班级集合中的学生List对象改掉,这样班级中也就存在了对这个学生的引用信息,这样就会比较麻烦.

mongodb 实现连接查询

我们在查询班级的时候就可以关联出这个班级下所有的学生信息了

mongodb 实现连接查询

搞个一对多这么麻烦,还不如不弄呢,不要急,条条大路通罗马,这条路不通,还有别的路啊.

我们的需求无非就是想知道某个班级下有多少个学生吗?如果不用关联的话就自己查呗,查的话我们没在学生集合中单独存储班级的id啊,引用里不是有id吗,就用那个查,但是要注意语法classObj.$id

mongodb 实现连接查询

源码地址:https://github.com/yinjihuan/cxytiandi

欢迎参与《mongodb 实现连接查询》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读