当前位置: 首页 > news >正文

自然资源网站建设方案网站建设推广方案模版

自然资源网站建设方案,网站建设推广方案模版,知名网站制作公司有哪些,wordpress 主题 zuopin目录 MongoDB 教程导读 NoSQL 简介 关系型数据库遵循ACID规则 分布式系统 分布式计算的优点 分布式计算的缺点 什么是NoSQL? 为什么使用NoSQL ? RDBMS vs NoSQL NoSQL 简史 CAP定理#xff08;CAP theorem#xff09; NoSQL的优点/缺点 BASE ACID vs BASE N…目录 MongoDB 教程导读 NoSQL 简介 关系型数据库遵循ACID规则 分布式系统 分布式计算的优点 分布式计算的缺点 什么是NoSQL? 为什么使用NoSQL ? RDBMS vs NoSQL NoSQL 简史 CAP定理CAP theorem NoSQL的优点/缺点 BASE ACID vs BASE NoSQL 数据库分类 MongoDB 简介  什么是MongoDB ? MongoDB的下载 MongoDB的特点 MongoDB 的适用场景 window平台安装MongoDB MongoDB 下载 解压安装包 创建数据目录(上一步没有创建为Windows服务的情况) 命令行下运行 MongoDB 服务器 连接MongoDB 配置 MongoDB 服务 管理员模式打开命令行窗口 创建配置文件 安装 MongoDB服务 MongoDB 后台管理 Shell Linux平台安装MongoDB  下载 安装 创建数据库目录 命令行中运行 MongoDB 服务 MongoDB后台管理 Shell MongoDb web 用户界面 MongoDB 概念解析 数据库DATABASE 文档Document  集合  合法的集合名 元数据 MongoDB 数据类型  MongoDB 连接 启动 MongoDB服务 通过shell连接MongoDB服务 参数选项说明 实例 MongoDB 连接命令格式 更多连接实例 MongoDB 创建数据库 语法 实例 MongoDB 删除数据库 语法 实例 删除集合 MongoDB 插入文档 插入文档 实例 查看已插入文档 MongoDB 更新文档 update() 方法 实例 save() 方法 实例 更多实例 MongoDB 删除文档 语法 实例 MongoDB 查询文档 语法 实例 MongoDB 与 RDBMS Where 语句比较 MongoDB AND 条件 实例 MongoDB OR 条件 实例 AND 和 OR 联合使用 MongoDB 条件操作符 描述 MongoDB () 大于操作符 - $gt MongoDB大于等于操作符 - $gte MongoDB () 小于操作符 - $lt MongoDB () 小于等于操作符 - $lte MongoDB 使用 () 和 () 查询 - $lt 和 $gt MongoDB $type条件操作符 描述 MongoDB 操作符 - $type 实例 MongoDB Limit与Skip方法 MongoDB Limit() 方法 语法 实例 MongoDB Skip() 方法 语法 实例 MongoDB 排序 MongoDB sort()方法 语法 实例 MongoDB 聚合 aggregate() 方法 语法 实例 管道的概念 管道操作符实例 MongoDB 教程导读 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品是非关系数据库当中功能最丰富最像关系数据库的。 它支持的数据结构非常松散是类似json的bson格式因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大其语法有点类似于面向对象的查询语言几乎可以实现类似关系数据库单表查询的绝大部分功能而且还支持对数据建立索引。 NoSQL 简介 NoSQL(NoSQL Not Only SQL )意即不仅仅是SQL。 在现代的计算系统上每天网络上都会产生庞大的数据量。 这些数据有很大一部分是由关系数据库管理系统RDMBSs来处理。 1970年 E.F.Codds提出的关系模型的论文 A relational model of data for large shared data banks这使得数据建模和应用程序编程更加简单。 通过应用实践证明关系模型是非常适合于客户服务器编程远远超出预期的利益今天它是结构化数据存储在网络和商务应用的主导技术。 NoSQL 是一项全新的数据库革命性运动早期就有人提出发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储相对于铺天盖地的关系型数据库运用这一概念无疑是一种全新的思维的注入。 关系型数据库遵循ACID规则 事务在英文中是transaction和现实世界中的交易很类似它有如下四个特性 1、A (Atomicity) 原子性 原子性很容易理解也就是说事务里的所有操作要么全部做完要么都不做事务成功的条件是事务里的所有操作都成功只要有一个操作失败整个事务就失败需要回滚。 比如银行转账从A账户转100元至B账户分为两个步骤1从A账户取100元2存入100元至B账户。这两步要么一起完成要么一起不完成如果只完成第一步第二步失败钱会莫名其妙少了100元。 2、C (Consistency) 一致性 一致性也比较容易理解也就是说数据库要一直处于一致的状态事务的运行不会改变数据库原本的一致性约束。 例如现有完整性约束ab10如果一个事务改变了a那么必须得改变b使得事务结束后依然满足ab10否则事务失败。 3、I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会互相影响如果一个事务要访问的数据正在被另外一个事务修改只要另外一个事务未提交它所访问的数据就不受未提交事务的影响。 比如现有有个交易是从A账户转100元至B账户在这个交易还未完成的情况下如果此时B查询自己的账户是看不到新增加的100元的。 4、D (Durability) 持久性 持久性是指一旦事务提交后它所做的修改将会永久的保存在数据库上即使出现宕机也不会丢失。 分布式系统 分布式系统distributed system由多台计算机和通信的软件组件通过计算机网络连接本地网络或广域网组成。 分布式系统是建立在网络之上的软件系统。正是因为软件的特性所以分布式系统具有高度的内聚性和透明性。 因此网络和分布式系统之间的区别更多的在于高层软件特别是操作系统而不是硬件。 分布式系统可以应用在在不同的平台上如Pc、工作站、局域网和广域网上等。 分布式计算的优点 可靠性容错 分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。 可扩展性 在分布式计算系统可以根据需要增加更多的机器。 资源共享 共享数据是必不可少的应用如银行预订系统。 灵活性 由于该系统是非常灵活的它很容易安装实施和调试新的服务。 更快的速度 分布式计算系统可以有多台计算机的计算能力使得它比其他系统有更快的处理速度。 开放系统 由于它是开放的系统本地或者远程都可以访问到该服务。 更高的性能 相较于集中式计算机网络集群可以提供更高的性能及更好的性价比。 分布式计算的缺点 故障排除  故障排除和诊断问题。 软件 更少的软件支持是分布式计算系统的主要缺点。 网络 网络基础设施的问题包括传输问题高负载信息丢失等。 安全性 开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。 什么是NoSQL? NoSQL指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。例如谷歌或Facebook每天为他们的用户收集万亿比特的数据。这些类型的数据存储不需要固定的模式无需多余操作就可以横向扩展。 为什么使用NoSQL ? 今天我们可以通过第三方平台如Google,Facebook等可以很容易的访问和抓取数据。用户的个人信息社交网络地理位置用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。 RDBMS vs NoSQL RDBMS - 高度组织化结构化数据 - 结构化查询语言SQL (SQL) - 数据和关系都存储在单独的表中。 - 数据操纵语言数据定义语言 - 严格的一致性 - 基础事务 NoSQL - 代表着不仅仅是SQL - 没有声明性查询语言 - 没有预定义的模式 -键 - 值对存储列存储文档存储图形数据库 - 最终一致性而非ACID属性 - 非结构化和不可预知的数据 - CAP定理 - 高性能高可用性和可伸缩性 NoSQL 简史 NoSQL一词最早出现于1998年是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。 2009年Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论[2]来自Rackspace的Eric Evans再次提出了NoSQL的概念这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。 2009年在亚特兰大举行的no:sql(east)讨论会是一个里程碑其口号是select fun, profit from real_world where relationalfalse;。因此对NoSQL最普遍的解释是非关联型的强调Key-Value Stores和文档数据库的优点而不是单纯的反对RDBMS。 CAP定理CAP theorem 在计算机科学中, CAP定理CAP theorem, 又被称作 布鲁尔定理Brewers theorem, 它指出对于一个分布式计算系统来说不可能同时满足以下三点: 一致性(Consistency) (所有节点在同一时间具有相同的数据)可用性(Availability) (保证每个请求不管成功或者失败都有响应)分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作) CAP理论的核心是一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求最多只能同时较好的满足两个。 因此根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类 CA - 单点集群满足一致性可用性的系统通常在可扩展性上不太强大。CP - 满足一致性分区容忍性的系统通常性能不是特别高。AP - 满足可用性分区容忍性的系统通常可能对一致性要求低一些。 NoSQL的优点/缺点 优点: - 高可扩展性- 分布式计算- 低成本- 架构的灵活性半结构化数据- 没有复杂的关系 缺点: - 没有标准化- 有限的查询功能到目前为止- 最终一致是不直观的程序 BASE BASEBasically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。 CAP理论的核心是一个分布式系统不可能同时很好的满足一致性可用性和分区容错性这三个需求最多只能同时较好的满足两个。 BASE是NoSQL数据库通常对可用性及一致性的弱要求原则: Basically Availble --基本可用Soft-state --软状态/柔性事务。 Soft state 可以理解为无连接的, 而 Hard state 是面向连接的Eventual Consistency --最终一致性 最终一致性 也是是 ACID 的最终目的。 ACID vs BASE ACIDBASE原子性(Atomicity)基本可用(Basically Available)一致性(Consistency)软状态/柔性事务(Soft state)隔离性(Isolation)最终一致性 (Eventual consistency)持久性 (Durable) NoSQL 数据库分类 类型部分代表特点列存储 Hbase Cassandra Hypertable 顾名思义是按列存储数据的。最大的特点是方便存储结构化和半结构化数据方便做数据压缩对针对某一列或者某几列的查询有非常大的IO优势。 文档存储 MongoDB CouchDB 文档存储一般用类似json的格式存储存储的内容是文档型的。这样也就有有机会对某些字段建立索引实现关系数据库的某些功能。 key-value存储 Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis 可以通过key快速查询到其value。一般来说存储不管value的格式照单全收。Redis包含了其他功能 图存储 Neo4J FlockDB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下而且设计使用不方便。 对象存储 db4o Versant 通过类似面向对象语言的语法操作数据库通过对象的方式存取数据。 xml数据库 Berkeley DB XML BaseX 高效的存储XML数据并支持XML的内部查询语法比如XQuery,Xpath。 MongoDB 简介  什么是MongoDB ? MongoDB 是由C语言编写的开源数据库系统。 在高负载的情况下添加更多的节点可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档。MongoDB是一个基于分布式文件存储的数据库。 MongoDB的下载 在MongoDB官网下载该安装包地址为Download MongoDB Community Server | MongoDB。 MongoDB的特点 面向集合存储易存储对象类型的数据。模式自由支持动态查询可通过网络访问支持查询支持复制和故障恢复支持完全索引包含内部对象文件存储格式为BSON一种JSON的扩展自动处理碎片以支持云计算层次的扩展性使用高效的二进制数据存储包括大型对象如视频等支持 GolangRUBYPYTHONJAVACPHPC# 等多种语言MongoDB安装简单。 MongoDB 的适用场景 MongoDB 的主要目标是在键/值存储方式提供了高性能和高度伸缩性和传统的RDBMS 系统具有丰富的功能之间架起一座桥梁它集两者的优势于一身。根据官方网站的描述Mongo 适用于以下场景。 网站数据Mongo 非常适合实时的插入更新与查询并具备网站实时数据存储所需的复制及高度伸缩性。缓存由于性能很高Mongo 也适合作为信息基础设施的缓存层。在系统重启之后由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。高伸缩性的场景Mongo 非常适合由数十或数百台服务器组成的数据库Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。用于对象及JSON 数据的存储Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。 MongoDB 的使用也会有一些限制例如它不适合于以下几个地方。 高度事务性的系统例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。传统的商业智能应用针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用数据仓库可能是更合适的选择。需要SQL 的问题。 window平台安装MongoDB MongoDB 下载 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包你可以从 MongoDB 官网下载安装MongoDB 预编译二进制包。 下载地址Download MongoDB Community Server | MongoDB 注意在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统。最新版本也已经没有了 32 位系统的安装文件。 注意接下来介绍的是选择zip格式的包如果选择msi格式的包要遵循msi的安装方式(直接双击运行即可。 解压安装包 下载zip包后解压安装包并安装它。 安装过程中你可以通过点击 Custom(自定义) 按钮来设置你的安装目录。 下一步安装 install mongoDB compass 不勾选当然你也可以选择安装它可能需要更久的安装时间MongoDB Compass 是一个图形界面管理工具我们可以在后面自己到官网下载安装。 下载地址MongoDB Compass Download (GUI) | MongoDB。 在安装的时候可以选择将MongoDB配置为Windows服务并启动。 在这个页面中你可以选择 选择Install MongoD as a service 可以将MongoDB 安装为服务安装为服务可以使用Windows服务来进行自启动更加方便只有选择安装为服务才可以进行下面的配置 Run service as Network Service user 即以网络服务用户身份运行服务默认 这是 Windows 内置的 Windows 用户帐户Run Service as a local or domain user 即以本地或域用户身份运行服务 对于现有的本地用户帐户为帐户域指定一个句点即 .上图即为该情况并为用户指定帐户名称和帐户密码。 对于现有域用户指定该用户的帐户域、帐户名称和帐户密码。 Service Name 即服务名称。指定服务名称。默认名称是 MongoDB。如果您已有具有指定名称的服务则必须选择其他名称。Data Directory 即数据目录。指定数据目录对应​--dbpath​。如果目录不存在安装程序将创建目录并将目录访问权限设置给服务用户。Log Directory 即日志目录。指定Log目录对应--logpath​。如果目录不存在安装程序将创建目录并将目录访问权限设置给服务用户。 选择完毕后点击next就可以看到install按钮点击install就可以开始安装了。 创建数据目录(上一步没有创建为Windows服务的情况) MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建我们在安装完成后需要创建它。请注意数据目录应该创建在根目录下(如 C:\ 或者 D:\ 等 )。 在本教程中我们已经在 D盘中解压了 mongodb 文件现在让我们创建一个 data 的目录然后在 data 目录里创建db目录。 d:\cd d:\ d:\mkdir data d:\cd data d:\datamkdir db d:\datacd db d:\data\db 你也可以通过 window 的资源管理器中创建这些目录不一定需要通过命令行来创建。 命令行下运行 MongoDB 服务器 为了从命令提示符下运行 MongoDB 服务器你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。 D://mongodb\bin\mongod --dbpath d:\data\db 如果执行成功会输出如下信息 2015-09-25T15:54:09.2120800 I CONTROL Hotfix KB2731284 or later update is not installed, will zero-out data files 2015-09-25T15:54:09.2290800 I JOURNAL [initandlisten] journal dirc:\data\db\j ournal 2015-09-25T15:54:09.2370800 I JOURNAL [initandlisten] recover : no journal fil es present, no recovery needed 2015-09-25T15:54:09.2900800 I JOURNAL [durability] Durability thread started 2015-09-25T15:54:09.2940800 I CONTROL [initandlisten] MongoDB starting : pid2 488 port27017 dbpathc:\data\db 64-bit hostWIN-1VONBJOCE88 2015-09-25T15:54:09.2960800 I CONTROL [initandlisten] targetMinOS: Windows 7/W indows Server 2008 R2 2015-09-25T15:54:09.2980800 I CONTROL [initandlisten] db version v3.0.6 …… 连接MongoDB 我们可以在命令窗口中运行 mongo.exe 命令即可连接上 MongoDB执行如下命令 D:\mongodb\bin\mongo.exe​ 配置 MongoDB 服务 注意一些新版本的 MongoDB 安装时已经自行完成大部分配置如果以下目录已经存在你可以直接跳过这部分内容。 管理员模式打开命令行窗口 创建目录执行下面的语句来创建数据库和日志文件的目录 ​mkdir D:\data\db mkdir D:\data\log​ 创建配置文件 创建一个配置文件。该文件必须设置 systemLog.path 参数包括一些附加的配置选项更好。 例如创建一个配置文件位于 C:\mongodb\mongod.cfg其中指定 systemLog.path 和 storage.dbPath。具体配置内容如下 systemLog:destination: filepath: c:\data\log\mongod.log storage:dbPath: c:\data\db 安装 MongoDB服务 通过执行 mongod.exe使用 --install 选项来安装服务使用 --config 选项来指定之前创建的配置文件。 C:\mongodb\bin\mongod.exe --config C:\mongodb\mongod.cfg --install 要使用备用 dbpath可以在配置文件例如C:\mongodb\mongod.cfg或命令行中通过 --dbpath 选项指定。 如果需要您可以安装 mongod.exe 或 mongos.exe 的多个实例的服务。只需要通过使用 --serviceName 和 --serviceDisplayName 指定不同的实例名。只有当存在足够的系统资源和系统的设计需要这么做。 启动 MongoDB 服务 net start MongoDB 关闭 MongoDB 服务 net stop MongoDB 移除 MongoDB 服务 D:\mongodb\bin\mongod.exe --remove命令行下运行 MongoDB 服务器 和  配置 MongoDB 服务 任选一个方式启动就可以。任选一个操作就好 MongoDB 后台管理 Shell 如果你需要进入 MongoDB 后台管理你需要先打开 mongodb 安装目录的下的bin目录然后执行​ mongo.exe​ 文件MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell,用来对 MongoDB 进行操作和管理的交互式环境。 如果找不到mongo.exe文件那是因为该版本没有自带MongoDB shell可以前往MongoDB 没有mongo.exe怎么办_w3cschoolMongoDB 没有mongo.exe怎么办_w3cschoolMongoDB 没有mongo.exe怎么办_w3cschool解决该问题 当你进入 mongoDB 后台后它默认会链接到 test 文档数据库 mongo MongoDB shell version: 3.0.6 connecting to: test …… 由于它是一个 JavaScript shell您可以运行一些简单的算术运算: test 2 2 4 test db 命令用于查看当前操作的文档数据库 test db test test 插入一些简单的记录并查找它 test db.w3cschool.insert({x:10}) { acknowledged: true, insertedIds: { 0: ObjectId(63196826c529a01f4ac522a2) } } testdb.w3cschool.find() [ { _id: ObjectId(63196826c529a01f4ac522a2), x: 10 } ] test 第一个命令将数字 10 插入到 w3cschool 集合的 x 字段中。 第二个命令查询w3cschool集合的所有内容。 Linux平台安装MongoDB  下载 MongoDB提供了linux平台上32位和64位的安装包你可以在官网下载安装包。 安装前我们需要安装各个 Linux 平台依赖包。 Red Hat/CentOS sudo yum install libcurl openssl Ubuntu 18.04 LTS (Bionic)/Debian 10 Buster sudo apt-get install libcurl4 openssl Ubuntu 16.04 LTS (Xenial)/Debian 9 Stretch sudo apt-get install libcurl3 openssl MongoDB 源码下载地址Download MongoDB Community Server | MongoDB 安装 这里我们选择 tgz 下载下载完安装包并解压 tgz以下演示的是 64 位 Linux上的安装 。 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz # 下载 tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz # 解压 mv mongodb-src-r4.2.8 /usr/local/mongodb4 # 将解压包拷贝到指定目录 MongoDB 的可执行文件位于 bin 目录下所以可以将其添加到 PATH 路径中 export PATHmongodb-install-directory/bin:$PATH ​mongodb-install-directory​ 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb4 。 export PATH/usr/local/mongodb4/bin:$PATH 创建数据库目录 MongoDB 的数据存储在 data 目录的 db 目录下但是这个目录在安装过程不会自动创建所以你需要手动创建 data 目录并在 data 目录中创建db目录。 以下实例中我们将 data 目录创建于根目录下(/)。 注意/data/db 是 MongoDB 默认的启动的数据库路径(​--dbpath​)。 mkdir -p /data/db 命令行中运行 MongoDB 服务 你可以在命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。 注意如果你的数据库目录不是/data/db可以通过 --dbpath 来指定。 $ ./mongod 2015-09-25T16:39:50.5490800 I JOURNAL [initandlisten] journal dir/data/db/journal 2015-09-25T16:39:50.5500800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 2015-09-25T16:39:50.8690800 I JOURNAL [initandlisten] preallocateIsFastertrue 3.16 2015-09-25T16:39:51.2060800 I JOURNAL [initandlisten] preallocateIsFastertrue 3.52 2015-09-25T16:39:52.7750800 I JOURNAL [initandlisten] preallocateIsFastertrue 7.7  MongoDB后台管理 Shell 如果你需要进入MongoDB后台管理你需要先打开mongodb装目录的下的bin目录然后执行mongo命令文件。 MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。 当你进入mongoDB后台后它默认会链接到 test 文档数据库 $ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell. …… 由于它是一个JavaScript shell您可以运行一些简单的算术运算: 22 436 9 现在让我们插入一些简单的数据并对插入的数据进行检索 db.W3Cschool.insert({x:10}) WriteResult({ nInserted : 1 })db.W3Cschool.find() { _id : ObjectId(5604ff74a274a611b0c990aa), x : 10 }第一个命令将数字 10 插入到 w3cschool 集合的 x 字段中。 第二个命令查询w3cschool集合的所有内容。 MongoDb web 用户界面 MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能需要在启动的时候指定参数​ --rest ​。 $ ./mongod --dbpath/data/db --rest MongoDB 的 Web 界面访问端口比服务的端口多1000。 如果你的MongoDB运行端口使用默认的27017你可以在端口号为28017访问web用户界面即地址为http://localhost:28017。 MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念在mongodb中基本的概念是文档、集合、数据库下面我们挨个介绍。 下表将帮助您更容易理解Mongo中的一些概念 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键 通过下图实例我们也可以更直观的的了解Mongo中的一些概念 数据库DATABASE 一个mongodb中可以建立多个数据库。 MongoDB的默认数据库为db该数据库存储在data目录中。 MongoDB的单个实例可以容纳多个独立的数据库每一个都有自己的集合和权限不同的数据库也放置在不同的文件中。 show dbs 命令可以显示所有数据的列表。 $ ./mongo MongoDB shell version: 3.0.6 connecting to: testshow dbs local 0.078GB test 0.078GB执行 db 命令可以显示当前数据库对象或集合。 $ ./mongo MongoDB shell version: 3.0.6 connecting to: testdb test运行use命令可以连接到一个指定的数据库。 use local switched to db localdb local以上实例命令中local 是你要链接的数据库。 数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。 不能是空字符串)。不得含有 空格)、.、$、/、\和\0 (空宇符)。应全部小写。最多64字节。 有一些数据库名是保留的可以直接访问这些有特殊作用的数据库。 admin 从权限的角度来看这是root数据库。要是将一个用户添加到这个数据库这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行比如列出所有的数据库或者关闭服务器。local: 这个数据永远不会被复制可以用来存储限于本地单台服务器的任意集合config: 当Mongo用于分片设置时config数据库在内部使用用于保存分片的相关信息。 文档Document  文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段并且相同的字段不需要相同的数据类型这与关系型数据库有很大的区别也是 MongoDB 非常突出的特点。  下表列出了 RDBMS 与 MongoDB 对应的术语 RDBMSMongoDB数据库数据库表格集合行文档列字段表联合嵌入文档主键主键 (MongoDB 提供了 key 为 _id )数据库服务和客户端Mysqld/Oraclemongodmysql/sqlplusmongo 需要注意的是 文档中的键/值对是有序的。文档中的值不仅可以是在双引号里面的字符串还可以是其他几种数据类型甚至可以是整个嵌入的文档)。MongoDB区分类型和大小写。MongoDB的文档不能有重复的键。文档的键是字符串。除了少数例外情况键可以使用任意UTF-8字符。 文档键命名规范 键不能含有\0 (空字符)。这个字符用来表示键的结尾。.和$有特别的意义只有在特定环境下才能使用。以下划线_开头的键是保留的(不是严格要求的)。 集合  集合就是 MongoDB 文档组类似于 RDBMS 关系数据库管理系统Relational Database Management System)中的表格。 集合存在于数据库中集合没有固定的结构这意味着你在对集合可以插入不同格式和类型的数据但通常情况下我们插入集合的数据都会有一定的关联性。 比如我们可以将以下不同数据结构的文档插入到集合中 {site:www.baidu.com} {site:www.google.com,name:Google} 当第一个文档插入时集合就会被创建。  合法的集合名 集合名不能是空字符串。集合名不能含有\0字符空字符)这个字符表示集合名的结尾。集合名不能以system.开头这是为系统集合保留的前缀。用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合否则千万不要在名字里出现$。  如下实例 db.col.findOne() 元数据 数据库的信息是存储在集合中。它们使用了系统的命名空间 dbname.system.* 在MongoDB数据库中名字空间 ​dbname.system.* ​是包含多种系统信息的特殊集合(Collection)如下: 集合命名空间描述dbname.system.namespaces列出所有名字空间。dbname.system.indexes列出所有索引。dbname.system.profile包含数据库概要(profile)信息。dbname.system.users列出所有可访问数据库的用户。dbname.local.sources包含复制对端slave的服务器信息和状态。 对于修改系统集合中的对象有如下限制。 在{{system.indexes}}插入数据可以创建索引。但除此之外该表信息是不可变的(特殊的​drop index​命令将自动更新相关信息)。 {{system.users}}是可修改的。 {{system.profile}}是可删除的。 MongoDB 数据类型  下表为MongoDB中常用的几种数据类型。 数据类型描述String字符串。存储数据常用的数据类型。在 MongoDB 中UTF-8 编码的字符串才是合法的。Integer整型数值。用于存储数值。根据你所采用的服务器可分为 32 位或 64 位。Boolean布尔值。用于存储布尔值真/假。Double双精度浮点值。用于存储浮点值。Min/Max keys将一个值与 BSON二进制的 JSON元素的最低值和最高值相对比。Arrays用于将数组或列表或多个值存储为一个键。Timestamp时间戳。记录文档修改或添加的具体时间。Object用于内嵌文档。Null用于创建空值。Symbol符号。该数据类型基本上等同于字符串类型但不同的是它一般用于采用特殊符号类型的语言。Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间创建 Date 对象传入年月日信息。Object ID对象 ID。用于创建文档的 ID。Binary Data二进制数据。用于存储二进制数据。Code代码类型。用于在文档中存储 JavaScript 代码。Regular expression正则表达式类型。用于存储正则表达式。 MongoDB 连接 在本教程我们将讨论MongoDB的不同连接方式。 启动 MongoDB服务 在前面的教程中我们已经讨论了如何启动MongoDB服务你只需要在MongoDB安装目录的bin目录下执行mongod即可。 执行启动操作后mongodb在输出一些必要信息后不会输出任何信息之后就等待连接的建立当连接被建立后就会开始打印日志信息。 你可以使用MongoDB shell 来连接 MongoDB 服务器。你也可以使用PHP来连接mongodb。本教程我们会使用 MongoDB shell来连接Mongodb服务之后的章节我们将会介绍如何通过php 来连接MongoDB服务。 默认情况下MongoDB的启动端口为27017。比MongoDB启动端口大1000的端口为MongoDB的web用户界面你可以在浏览器中输入http://localhost:28017 来访问MongoDB的web用户界面。 通过shell连接MongoDB服务 你可以通过执行以下命令来连接MongoDB的服务。 mongodb://[username:password]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 这是固定的格式必须要指定。username:password 可选项如果设置在连接数据库服务器之后驱动都会尝试登录这个数据库host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集请指定多个主机地址。portX 可选的指定端口如果不填默认为27017/database 如果指定username:password连接并验证登录指定数据库。若不指定默认打开 test 数据库。?options 是连接选项。如果不使用/database则前面需要加上/。所有连接选项都是键值对namevalue键值对之间通过或;分号隔开 参数选项说明 标准的连接格式包含了多个选项(options)如下所示 选项描述replicaSetname验证replica set的名称。 ImpliesconnectreplicaSet.slaveOktrue|false true:在connectdirect模式下驱动会连接第一台机器即使这台服务器不是主。在connectreplicaSet模式下驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在 connectdirect模式下驱动会自动找寻主服务器. 在connectreplicaSet 模式下驱动仅仅连接主服务器并且所有的读写命令都连接到主服务器。safetrue|false true: 在执行更新操作之后驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS). false: 在每次更新之后驱动不会发送getLastError来确保更新成功。wn驱动添加 { w : n } 到getLastError命令. 应用于safetrue。wtimeoutMSms驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safetrue.fsynctrue|false true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safetrue.false: 驱动不会添加到getLastError命令中。journaltrue|false如果设置wie true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safetrueconnectTimeoutMSms可以打开连接的时间。socketTimeoutMSms发送和接受sockets的时间。 实例 使用默认端口来连接 MongoDB 的服务。 mongodb://localhost 通过 shell 连接 MongoDB 服务 $ ./mongo MongoDB shell version: 4.0.9 connecting to: test ... 这时候你返回查看运行 ./mongod 命令的窗口可以看到是从哪里连接到MongoDB的服务器您可以看到如下信息 ……省略信息…… 2015-09-25T17:22:27.3360800 I CONTROL [initandlisten] allocator: tcmalloc 2015-09-25T17:22:27.3360800 I CONTROL [initandlisten] options: { storage: { dbPath: /data/db } } 2015-09-25T17:22:27.3500800 I NETWORK [initandlisten] waiting for connections on port 27017 2015-09-25T17:22:36.0120800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open) # 该行表明一个来自本机的连接……省略信息…… MongoDB 连接命令格式 使用用户名和密码连接到 MongoDB 服务器你必须使用 username:passwordhostname/dbname 格式username为用户名password 为密码。 使用用户名和密码连接登录到默认数据库 $ ./mongo MongoDB shell version: 4.0.9 connecting to: test 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上。输出结果如下所示 mongodb://admin:123456localhost/ ... 使用用户名和密码连接登录到指定数据库格式如下 mongodb://admin:123456localhost/test 更多连接实例 连接本地数据库服务器端口是默认的。 mongodb://localhost 使用用户名admin密码123456登录localhost的admin数据库。 mongodb://admin:123456localhost 使用用户名admin密码123456登录localhost的w3cschool数据库。 mongodb://admin:123456localhost/w3cschool 连接两个 replica pair的服务器, 服务器1为example1.com服务器2为example2.com。 当使用两个数据库其中一个作为备份数据库时需要一个复制机制来实现读写分离方案和节点数据库同步replica pair则是MongoDB的一种复制机制。  mongodb://example1.com:27017,example2.com:27017 连接三台replica set 的服务器 (端口 27017, 27018, 和27019): 与replica pair类似replica set也是一种复制机制而且可以算是replica pair的进阶版因为replica pair只能在两个节点间同步而replica set解决了这个问题。 mongodb://localhost,localhost:27018,localhost:27019 连接三台 replica set 的服务器, 写入操作应用在主服务器 并且分布查询到从服务器。 mongodb://host1,host2,host3/?slaveOktrue 直接连接第一个服务器无论是replica set一部分或者主服务器或者从服务器。 mongodb://host1,host2,host3/?connectdirect;slaveOktrue 当你的连接服务器有优先级还需要列出所有服务器你可以使用上述连接方式。 安全模式连接到localhost: mongodb://localhost/?safetrue 以安全模式连接到replica set并且等待至少两个复制服务器成功写入超时时间设置为2秒。 mongodb://host1,host2,host3/?safetrue;w2;wtimeoutMS2000 MongoDB 创建数据库 语法 MongoDB 创建数据库的语法格式如下 use DATABASE_NAME 如果数据库不存在则创建数据库否则切换到指定数据库。 实例 以下实例我们创建了数据库 youj: use youj switched to db youjdb youj如果你想查看所有数据库可以使用 show dbs 命令 show dbs local 0.078GB test 0.078GB可以看到我们刚创建的数据库 youj 并不在数据库的列表中 要显示它我们需要向 youj 数据库插入一些数据。 db.youj.insert({name:W3Cschool教程}) WriteResult({ nInserted : 1 })show dbs local 0.078GB youj 0.078GB test 0.078GBMongoDB 中默认的数据库为 test如果你没有创建新的数据库集合将存放在 test 数据库中。 MongoDB 删除数据库 语法 MongoDB 删除数据库的语法格式如下 db.dropDatabase() 删除当前数据库默认为 test你可以使用 db 命令查看当前数据库名。 实例 以下实例我们删除了数据库 youj。 首先查看所有数据库 show dbs local 0.078GB youj 0.078GB test 0.078GB接下来我们切换到数据库 youj use youj switched to db youj执行删除命令 db.dropDatabase() { dropped : youj, ok : 1 }最后我们再通过 show dbs 命令数据库是否删除成功 show dbs local 0.078GB test 0.078GB删除集合 集合删除语法格式如下 db.collection.drop() MongoDB 插入文档 本章节中我们将向大家介绍如何将数据插入到MongoDB的集合中。 文档的数据结构和JSON基本一样。 所有存储在集合中的数据都是BSON格式。 BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。 插入文档 MongoDB 使用​ insert()​ 或 ​save()​ 方法向集合中插入文档语法如下 db.COLLECTION_NAME.insert(document) 实例 以下文档可以存储在 MongoDB 的 w3cschool.cn 数据库 的 col集合中 db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: w3cschool,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 100 }) 以上实例中 col 是我们的集合名前一章节我们已经创建过了如果该集合不在该数据库中 MongoDB 会自动创建该集合并插入文档。 查看已插入文档 db.col.find() [{_id: ObjectId(631aac45a90ff4eda0a18d27),title: MongoDB 教程,description: MongoDB 是一个 Nosql 数据库,by: W3Cschool,url: http://www.w3cschool.cn,tags: [ mongodb, database, NoSQL ],likes: 100} ] 我们也可以将数据定义为一个变量如下所示 document({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: w3cschool,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 100 }); 执行后显示结果如下 {title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : w3cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 } 执行插入操作 db.col.insert(document) WriteResult({ nInserted : 1 })插入文档你也可以使用 ​db.col.save(document) ​命令。如果不指定 _id 字段 ​save() ​方法类似于 ​insert() ​方法。如果指定 _id 字段则会更新该 _id 的数据。 MongoDB 更新文档 MongoDB 使用 ​update()​ 和​ save() ​方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。 update() 方法 ​update() ​方法用于更新已存在的文档。语法格式如下 db.collection.update(query,update,{upsert: boolean,multi: boolean,writeConcern: document} ) 参数说明 query : update的查询条件类似sql update查询的where子句。update : update的对象和一些更新的操作符如$,$inc...等也可以理解为 sql update查询的set子句upsert : 可选这个参数的意思是如果不存在update的记录是否插入objNew,true为插入默认是false不插入。multi : 可选mongodb 默认是false,只更新找到的第一条记录如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选抛出异常的级别。 实例 我们在集合 col 中插入如下数据 db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: W3Cschool,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 100 }) 接着我们通过 update() 方法来更新标题(title): db.col.update({title:MongoDB 教程},{$set:{title:MongoDB}}) WriteResult({ nMatched : 1, nUpserted : 0, nModified : 1 }) # 输出信息db.col.find().pretty() {_id : ObjectId(56064f89ade2f21f36b03136),title : MongoDB,description : MongoDB 是一个 Nosql 数据库,by : W3Cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 }可以看到标题(title)由原来的 MongoDB 教程 更新为了 MongoDB。 以上语句只会修改第一条发现的文档如果你要修改多条相同的文档则需要设置 multi 参数为 true。 db.col.update({title:MongoDB 教程},{$set:{title:MongoDB}},{multi:true}) save() 方法 ​save() ​方法通过传入的文档来替换已有文档_id 主键存在就更新不存在就插入。语法格式如下 db.collection.save(document,{writeConcern: document} ) 参数说明 document : 文档数据。writeConcern :可选抛出异常的级别。 实例 以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据 db.col.save({_id : ObjectId(56064f89ade2f21f36b03136),title : MongoDB,description : MongoDB 是一个 Nosql 数据库,by : W3Cshcool,url : http://www.w3cschool.cn,tags : [mongodb,NoSQL],likes : 110 }) 替换成功后我们可以通过 find() 命令来查看替换后的数据 db.col.find().pretty() {_id : ObjectId(56064f89ade2f21f36b03136),title : MongoDB,description : MongoDB 是一个 Nosql 数据库,by : W3Cschool,url : http://www.w3cschool.cn,tags : [mongodb,NoSQL],likes : 110 }更多实例 只更新第一条记录 db.col.update( { count : { $gt : 1 } } , { $set : { test2 : OK} } ); 全部更新 db.col.update( { count : { $gt : 3 } } , { $set : { test2 : OK} },false,true ); 只添加第一条 db.col.update( { count : { $gt : 4 } } , { $set : { test5 : OK} },true,false ); 全部添加进去: db.col.update( { count : { $gt : 5 } } , { $set : { test5 : OK} },true,true ); 全部更新 db.col.update( { count : { $gt : 15 } } , { $inc : { count : 1} },false,true ); 只更新第一条记录 db.col.update( { count : { $gt : 10 } } , { $inc : { count : 1} },false,false ); MongoDB 删除文档 在前面的几个章节中我们已经学习了MongoDB中如何为集合添加数据和更新数据。在本章节中我们将继续学习MongoDB集合的删除。 MongoDB ​remove()​函数是用来移除集合中的数据。 MongoDB数据更新可以使用​update()​函数。在执行​remove()​函数前先执行​find()​命令来判断执行的条件是否正确这是一个比较好的习惯。 语法 ​remove() ​方法的基本语法格式如下所示 db.collection.remove(query,justOne ) 如果你的 MongoDB 是 2.6 版本以后的语法格式如下 db.collection.remove(query,{justOne: boolean,writeConcern: document} ) 参数说明 query :可选删除的文档的条件。justOne : 可选如果设为 true 或 1则只删除一个文档。writeConcern :可选抛出异常的级别。 实例 以下文档我们执行两次插入操作 db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: w3cschool,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 100 }) 使用 ​find()​ 函数查询数据 db.col.find() { _id : ObjectId(56066169ade2f21f36b03137), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb, database, NoSQL ], likes : 100 } { _id : ObjectId(5606616dade2f21f36b03138), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb, database, NoSQL ], likes : 100 } 接下来我们移除 title 为 MongoDB 教程 的文档 db.col.remove({title:MongoDB 教程}) WriteResult({ nRemoved : 2 }) # 删除了两条数据 db.col.find() …… # 没有数据 如果你只想删除第一条找到的记录可以设置 justOne 为 1如下所示 db.COLLECTION_NAME.remove(DELETION_CRITERIA,1) 如果你想删除所有数据可以使用以下方式类似常规 SQL 的 truncate 命令 db.col.remove({}) db.col.find()MongoDB 查询文档 语法 MongoDB 查询数据的语法格式如下 db.COLLECTION_NAME.find() ​find()​ 方法以非结构化的方式来显示所有文档。 如果你需要以易读的方式来读取数据可以使用 ​pretty() ​方法语法格式如下 db.col.find().pretty() ​pretty() ​方法以格式化的方式来显示所有文档。 实例 以下实例我们查询了集合 col 中的数据 db.col.find().pretty() {_id : ObjectId(56063f17ade2f21f36b03133),title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : w3cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 } 除了​ find()​ 方法之外还有一个​ findOne()​ 方法它只返回一个文档。 MongoDB 与 RDBMS Where 语句比较 如果你熟悉常规的 SQL 数据通过下表可以更好的理解 MongoDB 的条件语句查询 操作格式范例RDBMS中的类似语句等于​{key:value}​db.col.find({by:w3cschool}).pretty()where by w3cschool小于{key:{$lt:value}}db.col.find({likes:{$lt:50}}).pretty()where likes 50小于或等于{key:{$lte:value}}db.col.find({likes:{$lte:50}}).pretty()where likes 50大于{key:{$gt:value}}db.col.find({likes:{$gt:50}}).pretty()where likes 50大于或等于{key:{$gte:value}}db.col.find({likes:{$gte:50}}).pretty()where likes 50不等于{key:{$ne:value}}db.col.find({likes:{$ne:50}}).pretty()where likes ! 50 MongoDB AND 条件 MongoDB 的 ​find()​ 方法可以传入多个键(key)每个键(key)以逗号隔开及常规 SQL 的 AND 条件。 语法格式如下 db.col.find({key1:value1, key2:value2}).pretty() 实例 以下实例通过 by 和 title 键来查询 w3cschool 中 MongoDB 教程 的数据 db.col.find({by:w3cschool, title:MongoDB 教程}).pretty() {_id : ObjectId(56063f17ade2f21f36b03133),title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : w3cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 } 以上实例中类似于 WHERE 语句WHERE byw3cschool AND titleMongoDB 教程 MongoDB OR 条件 MongoDB OR 条件语句使用了关键字 $or,语法格式如下 db.col.find({$or: [{key1: value1}, {key2:value2}]} ).pretty() 实例 以下实例中我们演示了查询键 by 值为 w3cschool 或键 title 值为 MongoDB 教程 的文档。 db.col.find({$or:[{by:w3cschool},{title: MongoDB 教程}]}).pretty() {_id : ObjectId(56063f17ade2f21f36b03133),title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : w3cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 }AND 和 OR 联合使用 以下实例演示了 AND 和 OR 联合使用类似常规 SQL 语句为 where likes50 AND (by w3cschool OR title MongoDB 教程) db.col.find({likes: {$gt:50}, $or: [{by: w3cschool},{title: MongoDB 教程}]}).pretty() {_id : ObjectId(56063f17ade2f21f36b03133),title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : w3cschool,url : http://www.w3cschool.cn,tags : [mongodb,database,NoSQL],likes : 100 } MongoDB 条件操作符 描述 条件操作符用于比较两个表达式并从mongoDB集合中获取数据。 在本章节中我们将讨论如何在MongoDB中使用条件操作符。 MongoDB中条件操作符有 () 大于 - $gt() 小于 - $lt() 大于等于 - $gte( ) 小于等于 - $lte 我们使用的数据库名称为w3cschooldb 我们的集合名称为col以下为我们插入的数据。 为了方便测试我们可以先使用以下命令清空集合 col 的数据 db.col.remove({}) 插入以下数据 db.col.insert({title: PHP 教程, description: PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。,by: w3cschool,url: http://www.w3cschool.cn,tags: [php],likes: 200 }) db.col.insert({title: Java 教程, description: Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。,by: w3cschool,url: http://www.w3cschool.cn,tags: [java],likes: 150 }) db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: w3cschool,url: http://www.w3cschool.cn,tags: [mongodb],likes: 100 }) 使用​find()​命令查看数据 db.col.find() { _id : ObjectId(56066542ade2f21f36b0313a), title : PHP 教程, description : PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ php ], likes : 200 } { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 } { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 } MongoDB () 大于操作符 - $gt 如果你想获取 col 集合中 likes 大于 100 的数据你可以使用以下命令 db.col.find({likes : {$gt : 100}}) 类似于SQL语句 Select * from col where likes 100; 输出结果 db.col.find({likes : {$gt : 100}}) { _id : ObjectId(56066542ade2f21f36b0313a), title : PHP 教程, description : PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ php ], likes : 200 } { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 }MongoDB大于等于操作符 - $gte 如果你想获取col集合中 likes 大于等于 100 的数据你可以使用以下命令 db.col.find({likes : {$gte : 100}}) 类似于SQL语句 Select * from col where likes 100; 输出结果 db.col.find({likes : {$gte : 100}}) { _id : ObjectId(56066542ade2f21f36b0313a), title : PHP 教程, description : PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ php ], likes : 200 } { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 } { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 }MongoDB () 小于操作符 - $lt 如果你想获取col集合中 likes 小于 150 的数据你可以使用以下命令 db.col.find({likes : {$lt : 150}}) 类似于SQL语句 Select * from col where likes 150; 输出结果 db.col.find({likes : {$lt : 150}}) { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 } MongoDB () 小于等于操作符 - $lte 如果你想获取col集合中 likes 小于等于 150 的数据你可以使用以下命令 db.col.find({likes : {$lte : 150}}) 类似于SQL语句 Select * from col where likes 150; 输出结果 db.col.find({likes : {$lte : 150}}) { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 } { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 } MongoDB 使用 () 和 () 查询 - $lt 和 $gt 如果你想获取col集合中 likes 大于100小于 200 的数据你可以使用以下命令 db.col.find({likes : {$lt :200, $gt : 100}}) 类似于SQL语句 Select * from col where likes100 AND likes200; 输出结果 db.col.find({likes : {$lt :200, $gt : 100}}) { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 }MongoDB $type条件操作符 描述 在本章节中我们将继续讨论MongoDB中条件操作符​ $type​。 ​$type​操作符是基于BSON类型来检索集合中匹配的数据类型并返回结果。 MongoDB 中可以使用的类型如下表所示 类型数字备注Double1String2Object3Array4Binary data5Undefined6已废弃。Object id7Boolean8Date9Null10Regular Expression11JavaScript13Symbol14JavaScript (with scope)1532-bit integer16Timestamp1764-bit integer18Min key255Query with -1.Max key127 我们使用的数据库名称为w3cschooldb 我们的集合名称为col以下为我们插入的数据。 简单的集合col db.col.insert({title: PHP 教程, description: PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。,by: w3cschool,url: http://www.w3cschool.cn,tags: [php],likes: 200 }) db.col.insert({title: Java 教程, description: Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。,by: w3cschool,url: http://www.w3cschool.cn,tags: [java],likes: 150 }) db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: w3cschool,url: http://www.w3cschool.cn,tags: [mongodb],likes: 100 }) 使用​find()​命令查看数据 db.col.find() { _id : ObjectId(56066542ade2f21f36b0313a), title : PHP 教程, description : PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ php ], likes : 200 } { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 } { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 } MongoDB 操作符 - $type 实例 如果想获取 col 集合中 title 为 String 的数据你可以使用以下命令 db.col.find({title : {$type : 2}}) 输出结果为 { _id : ObjectId(56066542ade2f21f36b0313a), title : PHP 教程, description : PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ php ], likes : 200 } { _id : ObjectId(56066549ade2f21f36b0313b), title : Java 教程, description : Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。, by : w3cschool, url : http://www.w3cschool.cn, tags : [ java ], likes : 150 } { _id : ObjectId(5606654fade2f21f36b0313c), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : w3cschool, url : http://www.w3cschool.cn, tags : [ mongodb ], likes : 100 } MongoDB Limit与Skip方法 MongoDB Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录可以使用MongoDB的Limit方法​limit()​方法接受一个数字参数该参数指定从MongoDB中读取的记录条数。 语法 ​limit()​方法基本语法如下所示 db.COLLECTION_NAME.find().limit(NUMBER)实例 集合 myycol 中的数据如下 { _id : ObjectId(5983548781331adf45ec5), title:MongoDB Overview} { _id : ObjectId(5983548781331adf45ec6), title:NoSQL Overview} { _id : ObjectId(5983548781331adf45ec7), title:Tutorials Point Overview}以下实例为显示查询文档中的两条记录 db.mycol.find({},{title:1,_id:0}).limit(2) {title:MongoDB Overview} {title:NoSQL Overview}注如果你们没有指定​limit()​方法中的参数则显示集合中的所有数据。 MongoDB Skip() 方法 我们除了可以使用​limit()​方法来读取指定数量的数据外还可以使用​skip()​方法来跳过指定数量的数据skip方法同样接受一个数字参数作为跳过的记录条数。 语法 ​skip() ​方法脚本语法格式如下 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)实例 以上实例只会显示第二条文档数据 db.mycol.find({},{title:1,_id:0}).limit(1).skip(1) {title:NoSQL Overview}注:​​skip()​​方法默认参数为 0 。 MongoDB 排序 MongoDB sort()方法 在MongoDB中使用使用​sort()​方法对数据进行排序​sort()​方法可以通过参数指定排序的字段并使用 1 和 -1 来指定排序的方式其中 1 为升序排列而-1是用于降序排列。 语法 ​sort()​方法基本语法如下所示 db.COLLECTION_NAME.find().sort({KEY:1})实例 col 集合中的数据如下 { _id : ObjectId(5983548781331adf45ec5), title:MongoDB Overview} { _id : ObjectId(5983548781331adf45ec6), title:NoSQL Overview} { _id : ObjectId(5983548781331adf45ec7), title:Tutorials Point Overview}以下实例演示了 col 集合中的数据按字段 title 的降序排列 db.mycol.find({},{title:1,_id:0}).sort({title:-1}) {title:Tutorials Point Overview} {title:NoSQL Overview} {title:MongoDB Overview}注 如果没有指定​sort()​方法的排序方式默认按照文档的升序排列。 MongoDB 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等)并返回计算后的数据结果。有点类似sql语句中的 count(*)。 aggregate() 方法 MongoDB中聚合的方法使用​aggregate()​。 语法 ​aggregate()​ 方法的基本语法格式如下所示 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)实例 集合中的数据如下 {_id: ObjectId(7df78ad8902c)title: MongoDB Overview, description: MongoDB is no sql database,by_user: w3cschool.cn,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 100 }, {_id: ObjectId(7df78ad8902d)title: NoSQL Overview, description: No sql database is very fast,by_user: w3cschool.cn,url: http://www.w3cschool.cn,tags: [mongodb, database, NoSQL],likes: 10 }, {_id: ObjectId(7df78ad8902e)title: Neo4j Overview, description: Neo4j is no sql database,by_user: Neo4j,url: http://www.neo4j.com,tags: [neo4j, database, NoSQL],likes: 750 },现在我们通过以上集合计算每个作者所写的文章数使用​aggregate()​计算结果如下 db.mycol.aggregate([{$group : {_id : $by_user, num_tutorial : {$sum : 1}}}]) {result : [{_id : w3cschool.cn,num_tutorial : 2},{_id : Neo4j,num_tutorial : 1}],ok : 1 }以上实例类似sql语句 select by_user, count(*) from mycol group by by_user 在上面的例子中我们通过字段by_user字段对数据进行分组并计算by_user字段相同值的总和。 下表展示了一些聚合的表达式: 表达式描述实例$sum计算总和。db.mycol.aggregate([{$group : {_id : $by_user, num_tutorial : {$sum : $likes}}}])$avg计算平均值db.mycol.aggregate([{$group : {_id : $by_user, num_tutorial : {$avg : $likes}}}])$min获取集合中所有文档对应值得最小值。db.mycol.aggregate([{$group : {_id : $by_user, num_tutorial : {$min : $likes}}}])$max获取集合中所有文档对应值得最大值。db.mycol.aggregate([{$group : {_id : $by_user, num_tutorial : {$max : $likes}}}])$push在结果文档中插入值到一个数组中。db.mycol.aggregate([{$group : {_id : $by_user, url : {$push: $url}}}])$addToSet在结果文档中插入值到一个数组中但不创建副本。db.mycol.aggregate([{$group : {_id : $by_user, url : {$addToSet : $url}}}])$first根据资源文档的排序获取第一个文档数据。db.mycol.aggregate([{$group : {_id : $by_user, first_url : {$first : $url}}}])$last根据资源文档的排序获取最后一个文档数据db.mycol.aggregate([{$group : {_id : $by_user, last_url : {$last : $url}}}]) 管道的概念 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。 MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。 表达式处理输入文档并输出。表达式是无状态的只能用于计算当前聚合管道的文档不能处理其它的文档。 这里我们介绍一下聚合框架中常用的几个操作 $project修改输入文档的结构。可以用来重命名、增加或删除域也可以用于创建计算结果以及嵌套文档。$match用于过滤数据只输出符合条件的文档。$match使用MongoDB的标准查询操作。$limit用来限制MongoDB聚合管道返回的文档数。$skip在聚合管道中跳过指定数量的文档并返回余下的文档。$unwind将文档中的某一个数组类型字段拆分成多条每条包含数组中的一个值。$group将集合中的文档分组可用于统计结果。$sort将输入文档排序后输出。$geoNear输出接近某一地理位置的有序文档。 管道操作符实例 1、$project实例 db.article.aggregate({ $project : {title : 1 ,author : 1 ,}});这样的话结果中就只还有_id,tilte和author三个字段了默认情况下_id字段是被包含的如果要想不包含_id话可以这样: db.article.aggregate({ $project : {_id : 0 ,title : 1 ,author : 1}});2.$match实例 db.articles.aggregate( [{ $match : { score : { $gt : 70, $lte : 90 } } },{ $group: { _id: null, count: { $sum: 1 } } }] );$match用于获取分数大于70小于或等于90记录然后将符合条件的记录送到下一阶段$group管道操作符进行处理。 3.$skip实例 db.article.aggregate({ $skip : 5 }); 经过$skip管道操作符处理后前五个文档被过滤掉。
http://www.w-s-a.com/news/662849/

相关文章:

  • 做表格的网站东莞常平房价
  • 国家级建设网站高密做网站哪家强价位
  • 江西省新的建设厅三类人员网站做标记网站
  • 做最精彩绳艺网站产品设计培训
  • 营销型网站建设品牌深圳网络推广最新招聘
  • 单位网站等级保护必须做吗广州app软件开发公司
  • 免费flash网站模板怎么仿网站链接
  • 泉州网站建设哪家好平面设计转行做什么比较好
  • 忘记网站备案账号设计一个网站
  • 国内购物网站哪个最好海珠营销网站建设报价
  • 小型网站搭建logo免费制作
  • dede 网站模板哈尔滨房产信息网官方网站
  • 设计师个人作品集模板班级优化大师网页版登录
  • 高端网站建设教学网站开发前期准备工作
  • 网站评论列表模板设计官网的
  • 怎么做可以访问网站ui设计自学学的出来吗
  • 网站如何接入支付宝软件开发工作内容描述
  • 廊坊网站建设搭建整合营销传播的效果表现为
  • 网站服务器在本地是指园林绿化
  • 公司网站建设需要什么科目网站代运营价格
  • 网站建设前的ER图ppt模板图片 背景
  • 做一个网站花多少钱网站导航营销步骤
  • 仙桃网站定制做房产网站能赚钱吗
  • 西安网站制作模板最新源码
  • 南京江宁网站建设大学高校网站建设栏目
  • 模板网站建设明细报价表做网站第一
  • 公司网站建设系统软件开发 上海
  • 怎么让公司建设网站固安县建设局网站
  • 360免费建站官网入口手机网站建设设计
  • 商城网站建站系统dw如何做网页