http://www.linuxidc.com/Linux/2011-08/41043.htm

DBRef is a more formal specification for creating references between documents.  DBRefs (generally) include a collection
name as well as an object id.  Most developers only use DBRefs if the collection can change from one document to the next.  If your referenced collection will always be the same, the manual references outlined above are more efficient.

  1. ^_^[root@:/usr/local/mongodb/bin]#./mongo
  2. MongoDB shell version: 1.8.2
  3. connecting to: test
  4. > var a = {name:"C++"}
  5. > db
  6. test
  7. > db.language.save(a)
  8. > db.language.find()
  9. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  10. > var b = {name:"javascript"}
  11. > db.language.save(b)
  12. > db.language.find()
  13. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  14. { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" }
  15. > lan = {name:"obj1",computer:[new DBRef('language',a._id)]}
  16. {
  17. "name" : "obj1",
  18. "computer" : [
  19. {
  20. "$ref" : "language",
  21. "$id" : ObjectId("4da32c897d2de864e0448e06")
  22. }
  23. ]
  24. }
  25. > lan.computer[0]
  26. { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") }
  27. > lan.computer[0].fetch()
  28. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  29. > db.language.insert(lan)
  30. > db.language.find()
  31. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  32. { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" }
  33. { "_id" : ObjectId("4da33b487d2de864e0448e08"), "name" : "obj1", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } ] }
  34. > db.language.findOne({name:"obj1"}).computer[0].fetch()
  35. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  36. > lan2 = {name:"obj2",computer:[new DBRef('language',b._id)]}
  37. {
  38. "name" : "obj2",
  39. "computer" : [
  40. {
  41. "$ref" : "language",
  42. "$id" : ObjectId("4da32cb17d2de864e0448e07")
  43. }
  44. ]
  45. }
  46. > db.language.insert(lan2)
  47. > db.language.find()
  48. { "_id" : ObjectId("4da32c897d2de864e0448e06"), "name" : "C++" }
  49. { "_id" : ObjectId("4da32cb17d2de864e0448e07"), "name" : "javascript" }
  50. { "_id" : ObjectId("4da33b487d2de864e0448e08"), "name" : "obj1", "computer" : [ { "$ref" : "language", "$id" : ObjectId("4da32c897d2de864e0448e06") } ] }

MongoDB中级---->关联多表查询的更多相关文章

  1. Hibernate使用原生SQL语句进行无关联多表查询

    背景:有两个表:CpCg与CpGg需要进行多表查询 因为CpGg表设计到与另外的表也有联系,因此师兄没有关联此两个表,只是用字段进行逻辑关联,CpGg表的cp字段与CpCg表的id字段逻辑关联

  2. Mongoose中的关联表查询 && 聚合查询

    注:阅读此篇文章,需要有一定的Mongo基础.基本的不会再重复介绍. 例:  有两张表,一张是博客列表,另外一张是博客的标签表.现在我们要做两张表的插入和关联查询. 创建两张表的Schema 主表bl ...

  3. 【Mongodb】---关联表查询population

    Population MongoDB是非关联数据库.但是有时候我们还是想引用其它的文档.这就是population的用武之地. Population是从其它文档替换文档中的特定路径.我们可以迁移一个单 ...

  4. NodeJs操作MongoDB之多表查询($lookup)与常见问题

    NodeJs操作MongoDB之多表查询($lookup)与常见问题 一,方法介绍 aggregate()方法来对数据进行聚合操作.aggregate()方法的语法如下 1 aggregate(ope ...

  5. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  6. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

  7. MyBatis入门学习教程-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  8. MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  9. MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

随机推荐

  1. Android为什么使用Binder-android学习之旅(101)

    基础知识 Android进程和linux进程一样,他们只运行在进程固有的虚拟空间中.一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间 ,用户空间是非共享的,内核空间是共享的,如下图: ...

  2. 如何将windows格式的图标作为os x应用程序的图标

    刚由windows转为os x的同学可能知道,在os x下我们想改变一个app的图标异常简单,直接打开该app的简介,然后将图标文件拖入简介窗口左上角图标方框即可.但是很多童鞋下载了一些图标文件后发现 ...

  3. LeetCode(52)-Remove Linked List Elements

    题目: Remove all elements from a linked list of integers that have value val. Example Given: 1 --> ...

  4. 春天的事务之9.3编程式事务 - 跟我学spring3

    9.3编程式事务 9.3.1编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理. Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是采用相同 ...

  5. 通过jQuery源码学习javascript(三)

    承接上两篇继续写下去.我尽量把我明白的地方给大家说清楚.有些大家的提问我也有点搞不明白,如果有人能解答,再好不过了 疑问  第一篇中有位博友提出了以下的问题,我也不太明白,如果有明白的,能否告知一.二 ...

  6. 第15章-输入/输出 --- 理解Java的IO流

    (一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...

  7. Python入门指南(超详细)

    Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...

  8. 正确截取List指定位置的内容

    正确截取List指定位置的内容 import java.util.ArrayList; import java.util.List; public class ListUtils { public s ...

  9. XAMPP重置MySQL密码

    找到XAMPP的安装位置,这里以我的为例:C:\xampp 那么MySQL的路径:C:\xampp\mysql phpMyAdmin的路径:C:\xampp\phpMyAdmin 修改MySQL密码 ...

  10. java基本数据类型及其包装类

    1.String类 String s1 = "hello world"; String s2 = "hello world"; String s3 = s1 + ...