在关系型数据库中,通过连接运算符可以实现多个表联合查询。而非关系型数据库的特点是表之间属于弱关联,Mongodb作为Nosql代表,其本身特性不建议对多Collection关联处理,不过对于有些需要对多表关联处理的需求,Mongodb也可以实现。主要分为两种方式:简单手工关联和DBRef方式关联
1.简单手工关联
下图表示帖子和用户两个Collection的ER图:
首先将authors集合中的用户对象查询出来,放在一个变量author中,代码如下:
> author=db.authors.findOne({name:"chenzhou"})
{
"_id" : ObjectId("5030ba7621bdee44765b2147"),
"name" : "chenzhou",
"email" : "chenzhou1025@126.com"
}
通过用户对象author来获取帖子列表,代码如下:
> for(var post=db.posts.find({"author_name":author.name}); post.hasNext();){
... printjson(post.next().title);
... }
"Hello Mongodb"
"Hello World"
"Hello My Friend"
2.DBRef方式关联
DBRef就是在两个Collection之间定义的一个关联关系,比如,把CollectionB "_id"列的值存在CollectionA的一个列中,然后通过CollectionA这个列中所存的值在CollectionB中找到相应的记录。
示例:模拟用户发帖的过程,看一看如何将帖子表和用户表建立关联。
步骤1:取得当前用户信息,代码如下:
> author=db.authors.find({name:"chenzhou"})[0]
{
"_id" : ObjectId("5030ba7621bdee44765b2147"),
"name" : "chenzhou",
"email" : "chenzhou1025@126.com"
}
步骤2:发帖子并做关联,代码如下:
> db.posts.insert({"title":"Hello Mongodb DBRef1",
... authors:[new DBRef('authors',author._id)]})
> db.posts.insert({"title":"Hello Mongodb DBRef2",
... authors:[new DBRef('authors',author._id)]})
>
步骤3:通知帖子查找用户信息,代码如下:
> db.posts.find({"title":"Hello Mongodb DBRef1"})[0].authors[0].fetch()
{
"_id" : ObjectId("5030ba7621bdee44765b2147"),
"name" : "chenzhou",
"email" : "chenzhou1025@126.com"
}
通过这个例子可以看出,DBRef就是从文档的一个属性指向另一个文档的指针。
关于DBRef详细信息,可以参见官网说明:http://docs.mongodb.org/manual/applications/database-references/
分享到:
相关推荐
mysql 和mongodb 互相同步 连接 批量操作
查询文档2.MongoDB 与 RDBMS Where 语句比较3.MongoDB AND 条件4.MongoDB OR 条件5.AND 和 OR 联合使用 1.查询文档 语法 MongoDB 查询数据的语法格式如下: db.collection.find(query, projection) query :可选,...
在关系型数据库中,通过连接运算符可以实现多个表联合查询。而非关系型数据库的特点是表之间属于弱关联,下面这篇文章主要给大家介绍了关于mongodb实现同库联表查询的相关资料,文中通过示例代码介绍的非常详细,需要...
GetList(List<string> lstColName, Document query, JqGridParam jqParam, ref int count),封装了通用的获取前台表格数据的方法,将在工程中减少大量数据库访问代码,有了这个后对前台表格类查询我们可以不用在...
主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
映射(projection )声明用来限制所有查询匹配文档的返回字段。projection以文档的形式列举结果集中要包含或者排除的字段。可以指定要包含的字段(例如:{field:1})或者指定要排除的字段(例如:{field:0})。...
本文实例讲述了MongoDB多表关联查询操作。分享给大家供大家参考,具体如下: Mongoose的多表关联查询 ...Mongoose多表联合查询(还是以众所周知的学生、班级作为实例) · 表结构的定义(schemas目录下) 1. student表(s
自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT...
主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下
摘要:我们在文本中介绍了联合解决方案的基础,包括对MongoDB和InfoSphereGuardium的概述,还介绍了InfoSphereGuardium如何与MongoDB一起,在有关数据保护和合规性的方面提供巨大价值。此外,InfoSphereGuardiu......
满足Variety,MongoDB的架构分析器这个轻量级的工具可帮助您了解应用程序的架构以及该架构的任何异常值。 当您继承带有数据转储的代码库并想快速了解数据的结构时,此功能特别有用。 查找稀有密钥也很有用。 “我...
至于为什么是Couchbase而不是MongoDB什么的,因为博文的作者MCBrown是现任Couchbase副总裁,所以你懂得;同时这篇Couchbase博文还涉及到迁移后对查询的影响。:如果你有一个建立在MySQL上的数据库,你可能就会考虑...
AplicaçãoFullstack utilizando MongoDB,NodeJs,React e Redux 后端功能 O banco de dados Mongo foi hospedado no MLab porconveniência。 可以从中获取照片和照片的使用权,不要在WordPress上使用WordPress...
最终开发基于Web的软件开发学科(2021年),以及由USUDo和UD CRUD com联合开发的Express,MongoDB数据库。 :rocket: 技术 :laptop: 安装,执行和分解 先决条件 网页 # Entre na pasta frontend $ cd crud_app #...
工作正在进行中! 还没有准备好。 使用 Overpass API 获取 OpenStreetMap 数据并将结果缓存在 MongoDB ... 目前,我们能够执行简单查询的联合,其中标签与其过滤器完全匹配。 例如,以下查询返回避难所(节点)OR al
cf-fed-wiki - Cloud Foundry 的联合 wiki 版本 cf-fed-wiki软件包是为部署到 Cloud Foundry 而定制的版本。 了解 Federated Wiki 的最佳方式是访问。 在 Bluemix 上部署 您可以通过单击下面的“部署到 Bluemix”...
托皮卡联合之路圣诞局的支持 [关于这个项目的更多信息] ( ) 准备环境: 下载并安装 MongoDB(本指南很有帮助... ) 下载并安装 node.js 打开命令窗口,导航到 TopekaCB 并运行 node server.js。 运行包加载命令...
支持表的联合和分组查询。什么是RethinkDB?RethinkDB 是从头打造的第一个开源、可扩展的JSON数据库,用于搭建实时网页。全新的访问模型颠覆了传统的数据库结构:开发者只需告诉RethinkDB,实时连 续地将查询更新...
动漫联合平台 指导 语言能力 打字稿 工具 代码标准化 ESLint 沙哑 皮棉上演 提交皮棉 TSConfig路径 纱线工作区 图书馆 HTTP Axios 移动的 React本机 构架 测试框架 笑话 测试库 超级测试 服务器...