mongo中用嵌套结构优势是什么
首先需要知道,MongoDB是NoSQL中的一种,是不直接支持Join的,这是NoSQL的一个特点,不需要直接支持Join,可以将横向扩展以及性能做到更好。
但是这不等于说MongoDB不能做Join所做的事情,为了达到传统数据库join的功能,MongoDB中有2个思路:
Embedding:透过Embedding子文档,达到One to Many的关联关系;这就是您说的嵌套结构;
Referencing:Referencing分为手工Referencing和自动Referencing;通常推荐是手工Referencing,通常是将需要关联的文档的Object_id保存在需要关联的Collection中,也就是说需要关联的Document的Object_id写入时,分别写入在两个需要关联的Collection里面。
上述两个思路,也正是MongoDB的Data Model的主要思路。
那么上述2个思路在具体的运用的时候,怎么区分开呢?
如果能够Embedding的Sub Document,不需要单独被查询,那就直接Embedding;
如果这个Sub Document需要对外提供查询,则单独保存为一个Collection,并使用Referencing与其他collecion关联。
供参考。
Love MongoDB! Have Fun!
引:https://segmentfault.com/q/1010000009109840
mongo中用嵌套结构优势是什么的更多相关文章
- 嵌套结构使用:struc1-struc2-XXX
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- HDU-1495 非常可乐 (嵌套结构体-广搜 对比 一般广搜)
题意 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但 ...
- abap中结构体嵌套结构体。
1: 结构体中嵌套结构体. *&---------------------------------------------------------------------* *& Re ...
- C语言 结构体(嵌套结构体--结构体数组)
//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> ...
- matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段
一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...
- go变量、类的概念以及类的使用方式,嵌套结构体
go变量.类的概念以及类的使用方式,嵌套结构体 Go变量 go使用var声明变量,当声明变量时,这个变量对应的值总是会被初始化.这个值要么用指定的值初始化,要么用零值(即变 量类型的默认值)做初始化. ...
- 递归遍历嵌套结构(多层List)中的元素 ------Python
读Python基础教程(第二版)后看到了这么一个东西,就是利用递归遍历嵌套结构中的元素. 上代码: #encoding:UTF-8 def flatten(nested): try: #不要迭代类似字 ...
- go 下面定义嵌套结构
package main import ( "fmt" ) const ( URL = "http://www.163.com" UID = "adm ...
- Java-if 嵌套结构
import java.util.Scanner; public class ifs{ public static void main(String args[]){ Scanner in=new S ...
随机推荐
- ES - es为什么要移除type?
1.index.type的初衷 之前es将index.type类比于关系型数据库(例如mysql)中database.table,这么考虑的目的是“方便管理数据之间的关系”. 2.为什么现在要移除ty ...
- es6入门总结
let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...
- 课上补做:用C语言编程实现ls命令
课上补做:用C语言编程实现ls命令 一.有关ls ls :用来打印当前目录或者制定目录的清单,显示出文件的一些信息等. ls -l:列出长数据串,包括文件的属性和权限等数据 ls -R:连同子目录一同 ...
- 使用sqlplus创建Oracle表空间
登录 dos窗口输入以下命令:sqlplus 回车 提示输入用户名——即创建数据库实例时的用户名 ,用户名输入:sys as sysdba 密码.........回车登录 查看数据文件位置 接下来, ...
- Java进程&线程(一)
Java进程&线程 程序:程序员写的代码,就是代码,不运行好像不会发生什么: 进程:一个进程可以理解为"运行的"一个程序,当我们启动一个java程序后,对应的jvm就会创建 ...
- On-die termination for DDR
本文转载自: https://blog.csdn.net/weixin_38233274/article/details/81016870 ODT是什么鬼?为什么要用ODT?在很多关于DDR3的博文和 ...
- OpenCV中Mat的使用
一.数字图像存储概述 数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵. 二.Mat的存储 1.OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘 ...
- C# 使用缓存数据模拟抢购
在所有的电商网站中,不乏大量的抢购,比如双十一,双十二等等,作为一名开发人员考虑最多的就是多并发以及高并发 废话少说,开始写代码.我用了C#的MemoryCache代替试下流行的各种缓存 商品测试 ...
- 调试dump文件
1.设置好pdb文件和源代码路径 为了能正确分析Dump文件,我们必须要指定和程序一起出来的PDB文件,如果程序重新被编译了一次,即使代码没有任何变化,之前的PDB文件我们不能再继续使用.
- Nagios Email告警 发不了,可能是 /var/spool/mqueue nagios用户没权限
Nagios邮件报警 Nagios邮件报警 准备 yum - y install ntp ntpdate time.windows.com 同步时间,否则无法发送邮件 yum - ...