MongoDB关系与数据库引用

MongoDB关系:

MongoDB 的关系表示多个文档之间在逻辑上的相互联系。文档间可以通过嵌入和引用来建立联系。

1. 嵌入关系:

形式:把一个文档嵌入到另一个文档中。

优点:数据保存在单一的文档中,可以比较容易的获取和维护数据。(只需一次查询)

缺点:如果数据量不断变大,会影响读写性能。

使用示例:

{

"_id":ObjectId("52ffc33cd85242f436000001"),

"name": "Tom Benzamin",

"address": [

{

"building": "22 A, Indiana Apt",

"pincode": 123456,

},

{

"building": "170 A, Acropolis Apt",

"pincode": 456789,

}]

}

查询示例:

db.users.findOne({"name":"Tom Benzamin"},{"address":1})

2. 引用关系:

形式:通过文档的id字段来建立关系。

缺点:查询时需要两次查询。

使用示例:

{

"_id":ObjectId("52ffc33cd85242f436000001"),

"name": "Tom Benzamin",

"address_ids": [

ObjectId("52ffc4a5d85242602e000000"),

ObjectId("52ffc4a5d85242602e000001")

]

}

查询示例:

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})

>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

数据库引用:当一个文档需要从多个集合引用文档时,应该使用DBRefs。

DBRefs的形式:

{ $ref : , $id : , $db :  }

三个字段表示的意义为:

$ref:集合名称

$id:引用的id

$db:数据库名称,可选参数

使用示例:

{

"_id":ObjectId("53402597d852426020000002"),

"address": {

"$ref": "address_home",

"$id": ObjectId("534009e4d852427820000002"),

"$db": "w3cschoolcc"},

"contact": "987654321",

"dob": "01-01-1991",

"name": "Tom Benzamin"

}

查询示例:

>var user = db.users.findOne({"name":"Tom Benzamin"})

>var dbRef = user.address

>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

时间: 2024-11-05 15:44:24

MongoDB关系与数据库引用的相关文章

mongodb 关系、引用、覆盖索引查询

一.关系 MongoDB 的关系表示多个文档之间在逻辑上的相互联系.文档间可以通过嵌入和引用来建立联系.MongoDB 中的关系可以是:1对1,1对多,多对1,多对多. 一个用户可以用多个地址,这是典型的一对多关系. user文档可以是: { "_id":ObjectId("52ffc33cd85242f436000001"), "name": "Tom Hanks", "contact": "9

第五十一课 NoSQL基础概念及MongoDB应用、数据库分配概念

NoSQL基础概念及MongoDB MongoDB基础应用 MongoDB索引及复制集 数据库分片的概念及Mongodb  sharding的实现 一.NoSQL基础概念 NoSQL(Not Only SQL),是一种技术流派,非关系型数据库:适合用在大数据领域,各种nosql有各自的查询语句,这也是nosql的缺点之一. 大数据(BigDate)也称海量数据是一个模糊的概念,像Google.百度收集大量数据,分析现在.预测未来:这些数据通过某些特定的特征和算法得出某些预测的结果,这些数据为大数

使用MongoDB作为后台数据库的尝试

MongoDB作为一个阶层型数据库,在很短的时间里面是不可能被大面积推广使用的, 本文作为一个实验性的课题,探讨一下MongoDB作为网站数据库的可能性. 1.MongoDB作为代替关系型数据库的可能性. 2.MongoDB作为代替文件服务器的可能性. 通过探讨来加强对于MongoDB的认识 环境准备 技术选型 1.由于是验证性质的课题,这里没有使用MVC5/6.如果有人对MVC6有兴趣,可以另开一个课题讨论.这里使用的是传统的WebForm. 2.使用MongoDB最新版本作为数据库 3.Mo

MongoDB 与传统数据库的对比

mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(document)三个层次组成.MongoDB对于关系型数据库里的表,但是集合中没有列.行和关系概念,这体现了模式自由的特点. MySQL MongoDB 说明 mysqld mongod 服务器守护进程 mysql mongo 客户端工具 mysqldump mongo

MongoDB和关系型数据库简单对比

MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库:数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的文件.一个单一的MongoDB服务器通常有多个数据库. 集合:集合是一组MongoDB的文档.它相当于一个RDBMS表.收集存在于一个单一的数据库.集合不执行模式.集合内的文档可以有不同的领域.通常情况下,一个集合中的所有文件是相同或相关的目的. 文档:文档是一组键 - 值对. 文件动态模式.动态模

MongoDB非关系型数据库开发手册

一:NoSql数据库 什么是NoSQL? NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. 为什么使用NoSQL ? 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据.用户的个人信息,社交网络,地理

MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本章迭代更新) 一.数据库之间的区别 MySQL MySQL概述 关系型数据库.无论数据还是索引都存放在硬盘中.到要使用的时候才交换到内存中.能够处理远超过内存总量的数据. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断

MongoDB:更改数据库位置(Windows)

MongoDB在Windows中默认的数据库目录是c:\data.如果在没有该目录的情况下,直接运行mongod.exe,就会报如下错误: 在某些情况下,我们并不想把mongoDB的数据库放在c盘,这时候有两种方法可以切换数据库目录. 1. 命令方式 首先创建数据库目录,例如d:\data.然后运行命令 mongod –dbpath d:\data 2. 配置文件方式 在任意位置创建一个配置文件,例如c:\mongodb\conf的目录下创建一个名为master.cfg的文件,内容为dbpath

MongoDB复制集数据库拆分和版本升级实战

MongoDB复制集数据库拆分和版本升级实战 问题描述 复制集rs_1上承载了所有的数据库业务,而加内存已经无法满足应用程序压力. 解决方案 考虑拆分复制集rs_1的部分数据库到rs_2,并同时升级数据库版本到2.6. 架构图 准备 评估升级可能性 1. 连接2.6 mongo shell到2.4 复制集辅助成员,在admin库执行db.upgradeCheckAllDBs().   2. 评估升级到2.6的应用程序兼容性问题,参考:http://docs.mongodb.org/manual/