mongdb 基本概念

简介: mangodb可以有多个instance,一个instance可以有多个database, database又可以有多个collection,每个collection也可以有多个document 1、文档(Document) mongoDB的基本单位,相当于关系数据库中的行。它是一组有序的key/value键值对, 使用json格式,如:{"

mangodb可以有多个instance,一个instance可以有多个database,

database又可以有多个collection,每个collection也可以有多个document


1、文档(Document)

mongoDB的基本单位,相当于关系数据库中的行。它是一组有序的key/value键值对,

使用json格式,如:{"foo" : 3, "greeting" "Hello, world!"}。

(1)key是个UTF-8字符串,以下几点是需要注意的地方:

  • 不能包含\0字符(null字符),它用于标识key的结束
  • .和$字符在mangodb中有特殊含义,如$被用于修饰符($inc表示更新修饰符),应该考虑保留,以免被驱动解析
  • 以_开始的key也应该保留,比如_id是mangodb中的关键字
         在mangodb中key是不能重复的

(2)value 是弱类型,甚至可以嵌入的一个document

(3)key/value键值对在mangodb中是有序的

(4)mangodb是类型和大小写敏感的,如{"foo" : 3}和{"foo" : "3"}是两个不同的document,{"foo" : 3}和{"Foo" : 3}类似


2、集合(Collection)

相当于关系数据库的表,不过没有数据结构的定义。它有多个document组成。

因为是无结构定义的,所以你可以把任何document存入一个collection里。每个

collection用一个名字标识,需要注意以下几点:

  • 名字不允许是空字符串""
  • 名字不能包含\0字符,因为它表示名字的结束
  • 不能创建以system.开头的


3、数据库(Database)

一个mongoDB的实例可以运行多个database,database之间是完全独立的,每个database有自己的权限,每个database存储于磁盘的不同文件。

同collections的name一样,databases的name可以是任意的UTF-8字符串。但是有以下限制:

  • 空字符串””是非法的
  • 不允许出现’’,.,$,/,\,\0字符
  • 建议名称都是小写
  • 不能超过64个字节

有几个保留的名字不能用在databases的name中:

  • admin:它是root级别的数据库,如果一个用户创建了admin数据库,该用户将自动集成所有数据库的权限,它可以执行一些服务器级别的命令,如列出所有数据库、关闭服务等。
  • local:该数据库将永远不能被复制,只能在单台服务器本地使用。
  • config:存储分布式部署时shard的配置信息

4、数据类型

  • null
             表示一个空值或者不存在的字段,如{"x":null}
  • boolean
             使用true或false表示值,如{"x" : true}
  • 32位整数
             shell中无法表示,javascript只支持64位浮点小数,所以会被转化为64位浮点小数。
  • 64位整数(同上)
  • 64位浮点小数
             在shell中所有数字都使用该类型,如{"x" : 3.14}、{"x" : 3}
  • string
             任何UTF-8的字符
  • symbol
             shell不支持此类型,来自数据库中的symbol类型数据会转化为字符串
  • object id
             0 1 2 3     |4 5 6     |7 8   |9 10 11

             Timestamp|Machine | PID  |Increment

             如{"x" : ObjectId()}

  • date
             表示距离新纪元的毫秒数,如{"x" : new Date()}
  • 正则表达式
如何javascript语法的正则表达式
如{"x" : /foobar/i}
  • code

javascript的代码

如{"x" : function() { /* ... */ }}

  • 二进制数据
  • maximum value
    bson有这样一个专门的类型来表示可能的最大值,shell不支持此类型。
  • minimum value
  • undefined
  • array
  • embeded document

目录
相关文章
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
Java Maven 索引
Logback:同时按照日期和大小分割日志(最新日志可以不带日期或数字)
Logback:同时按照日期和大小分割日志(最新日志可以不带日期或数字)
Logback:同时按照日期和大小分割日志(最新日志可以不带日期或数字)
|
6月前
|
人工智能 缓存 JavaScript
通义灵码深度体验:AI编程助手如何提升全栈开发效率
通义灵码是一款强大的AI编程助手,支持从代码补全到智能体自主开发的全流程辅助。在React+Node.js项目中,其实现了100%字段匹配的Mongoose Schema生成;通过`@灵码`指令,30秒内完成天气查询CLI工具开发,包含依赖管理与文档编写。其上下文记忆能力可自动关联模块逻辑,如为商品模型扩展库存校验。集成MCP服务时,不仅生成基础代码,还推荐最佳实践并添加缓存优化。测试显示,其响应速度快、复杂任务准确率高,适合中小型项目快速迭代,初期开发效率提升约40%。尽管存在文档同步延迟和TypeScript支持不足的问题,仍是一款优秀的AI编程伙伴。
349 7
|
6月前
|
人工智能 Shell 开发者
Python项目管理工具 PDM
PDM(Python Development Master)是一款现代化的Python包管理工具,基于PEP 582标准,无需虚拟环境即可实现依赖隔离。它支持PEP 621声明项目元数据,告别`setup.py`,并具备快速安装、简洁依赖管理和内置脚本系统等优势。通过简单命令如`pdm init`、`pdm add`和`pdm run`,用户可轻松完成项目初始化、依赖管理和运行。适合希望简化依赖管理、追求现代工具体验的开发者,尤其对传统工具如`pipenv`或`poetry`不满意的用户。
305 1
|
9月前
|
机器学习/深度学习 自然语言处理 监控
深入探索:深度学习在时间序列预测中的强大应用与实现
时间序列分析是数据科学和机器学习中一个重要的研究领域,广泛应用于金融市场、天气预报、能源管理、交通预测、健康监控等多个领域。时间序列数据具有顺序相关性,通常展示出时间上较强的依赖性,因此简单的传统回归模型往往不能捕捉其中复杂的动态特征。深度学习通过其非线性建模能力和层次结构的特征提取能力,能够有效地捕捉复杂的时间相关性和非线性动态变化模式,从而在时间序列分析中展现出极大的潜力。
|
12月前
|
存储 负载均衡 云计算
抖音服务器是什么样的
抖音服务器采用分布式云计算架构,遍布全国多个数据中心,如北上广、四川和贵州等地,利用高带宽、云集群并发及OSS、CDN、SLB等技术,确保大量用户同时流畅观看视频。这不仅需要强大的服务器群支持,还需精准的负载均衡与内容分发网络,保障用户体验。
597 1
|
存储 安全 Java
Java中数据加密与解密的最佳实践
Java中数据加密与解密的最佳实践
|
JSON 数据格式
使用JSON解析对象成map结构
使用JSON解析对象成map结构
615 0
|
安全 网络安全 数据安全/隐私保护
|
算法 计算机视觉
使用OpenCV+C++将Gif文件分解并且转换为视频文件
原文链接 目标: 认识 Gif 利用 FreeImage 将Gif解析为 Mat; 利用 FreeImage 获取多帧Gif图像; 将获取的多帧图像保存,并利用OpenCv生成为视频文件。
2931 0