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下Json数据解析

    如从网络获取JSON 则需要创建一个工具类,该类返回一个字符串为JSON文本 package com.example.jsonapp; import java.io.InputStreamReader ...

  2. angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  3. climbing stairs(爬楼梯)(动态规划)

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  4. java面试笔试题大汇总

    第一,谈谈final, finally, finalize的区别.  最常被问到.   第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以 ...

  5. java并发包分析之———AQS框架

    一.什么是同步器   多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx . 这个共同的语义可以称之为同步器.可以认为以上所有的锁机制都可以基 ...

  6. 多重影分身——C#中多线程的使用一(基础)

    首先明确几个概念: 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 一个程序通常只有一个进程(不包括exe ...

  7. 电商网站开发记录(三) Spring的引入,以及配置详解

    1.web.xml配置注解<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...

  8. Day5_递归_二分法

    递归调用: 在调用一个函数的过程中,直接或间接的调用函数本身. def func(): print('from func') 间接调用: def foo(): print('form foo') ba ...

  9. Xshell 5 配置上传下载命令

    可以在官网https://www.netsarang.com/products/main.html 下载Xshell, 目前最新的版本已经到Xshell 6了 本人记录下安装的目录截图: 安装命令:  ...

  10. 【读书笔记】C++Primer---第二章

    1.C++基本数据类型:字符型.整型.浮点型等: 2.算术类型如下表,下表只是表示C++要求的最小储存空间,但是一般编译器使用的都比所要求的储存空间大,以前类型所能表示的最大值也因机器的不同而有不同的 ...