mongodb lsm(MongoDB 基础入门)

wufei123 发布于 2023-11-04 阅读(950)

《php基础教程》

mongodb 一、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的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入1.1 关系型数据库遵资源网循ACID规则事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不资源网做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。

这两步资源网要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元2、C (Consistency) 一致性 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会资源网改变数据库原本的一致性约束。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败3、I (Isolation) 独立性 所谓的独立性资源网是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现有有个交易是从A账户转100元至B账户,在这个交易还资源网未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的4、D (Durability) 持久性 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

1资源网.2 分布式系统分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成分布式系统是建立在网络之上的软件系统正是因为软件的特性,所以分布资源网式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等1.3 分布式计算资源网的优点可靠性(容错) : 分布式计算系统中的一个重要的优点是可靠性。

一台服务器的系统崩溃并不影响到其余的服务器可扩展性: 在分布式计算系统可以根据需要增加更多的机器资源共享: 共享数据是必不可少的应用资源网,如银行,预订系统灵活性: 由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

更快的速度: 分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度开放系统: 由于它是开放的资源网系统,本地或者远程都可以访问到该服务更高的性能: 相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

1.4分布式计算的缺点故障排除: : 故障排除和诊断问题软件: 更少的软件支持是分布式资源网计算系统的主要缺点网络: 网络基础设施的问题,包括:传输问题,高负载,信息丢失等安全性: 开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。

什么是NoSQL?NoSQL,指的是非关系资源网型的数据库NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称NoSQL用于超大规模数据的存储(例如谷歌或Facebook每天为他们的用户收集万亿比特资源网的数据)。

这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展为什么使用NoSQL ?今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据用户的个人信资源网息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。

我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据实例社会化资源网关系网:Each record: UserID1, UserID2 Separate records: UserID, first_name,last_name, age, gender,... Ta资源网sk: Find all friends of friends of friends of ... friends of a given user.

Wikipedia 页面 :Large collec资源网tion of documents Combination of structured and unstructured data Task: Retrieve all pages regarding资源网 athletics of Summer Olympic before 1950.

RDBMS vs NoSQLRDBMS 高度组织化结构化数据 结构化查询语言(SQL) (SQL) 数据和关系都存储在资源网单独的表中 数据操纵语言,数据定义语言 严格的一致性基础事务NoSQL 代表着不仅仅是SQL。

没有声明性查询语言没有预定义的模式 -键 - 值对存储,列存储,文档存储,图形数据库最终一致性,而非ACI资源网D属性非结构化和不可预知的数据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 relational=false;"。

因此,对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMSCAP定理(CAP 资源网theorem)在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewers theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

一致性(C资源网onsistency) (所有节点在同一时间具有相同的数据)可用性(Availability) (保证每个请求不管成功或者失败都有响应)分隔容忍(Partition tolerance) (系统中任意资源网信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个因此,根据 CAP 原理将 NoSQL 数资源网据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:。

CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大CP - 满足一致性,分区容忍必的系统,通常性能不是特别资源网高AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些NoSQL的优点/缺点

优点:- 高可扩展性- 分布式计算- 低成本- 架构的灵活性,半结构化数据- 没有复杂的关系缺点:- 没有标准资源网化- 有限的查询功能(到目前为止)- 最终一致是不直观的程序BASEBASE:Basically Available, Soft-state, Eventually Consistent。

由 Eric资源网 Brewer 定义CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:。资源网

Basically Availble --基本可用Soft-state --软状态/柔性事务 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的Even资源网tual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

ACID vs BASEACIDBASE原子性(Atomicity)基本可用(Basically Avai资源网lable)一致性(Consistency)软状态/柔性事务(Soft state)隔离性(Isolation)最终一致性 (

Eventual consistency)持久性 (Durable)NoS资源网QL 数据库分类类型部分代表特点列存储HbaseCassandraHypertable顾名思义,是按列存储数据的最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有资源网非常大的IO优势。

文档存储MongoDBCouchDB文档存储一般用类似json的格式存储,存储的内容是文档型的这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能key-value存储Tok资源网yo Cabinet / TyrantBerkeley DBMemcacheDBRedis可以通过key快速查询到其value。

一般来说,存储不管value的格式,照单全收(Redis包含了其他功能)资源网图存储Neo4JFlockDB图形关系的最佳存储使用传统关系数据库来解决的话性能低下,而且设计使用不方便对象存储db4oVersant通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

xm资源网l数据库Berkeley DB XMLBaseX高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath二、MongoDB 概念解析不管我们学习什么数据库都应该学习其中的基础概念资源网,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。

下表将帮助您更容易理解Mongo中的一些概念:SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数资源网据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持pri资源网mary keyprimary key主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的的了解Mongo中的一些概念:

2.1 数据库一个mongodb中可以建立多个数据库M资源网ongoDB的默认数据库为"db",该数据库存储在data目录中MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

"show dbs" 命资源网令可以显示所有数据的列表 $ ./mongo MongoDB shell version: 3.0.6 connecting to: test > show dbs local 0.078GB tes资源网t 0.078GB > 。

执行 "db" 命令可以显示当前数据库对象或集合 $ ./mongo MongoDB shell version: 3.0.6 connecting to: test > d资源网b test > 。

运行"use"命令,可以连接到一个指定的数据库 > use local switched to db local > db local > 以上实例命令中,"local" 是你要链资源网接的数据库。

在下一个章节我们将详细讲解MongoDB中命令的使用数据库也通过名字来标识数据库名可以是满足以下条件的任意UTF-8字符串不能是空字符串("")不得含有 (空格)、.、$、/、\和\0 (资源网空宇符)应全部小写。

最多64字节有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库admin: 从权限的角度来看,这是"root"数据库要是将一个用户添加到这个数据库,这个用户自动继承所有数据资源网库的权限一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合config: 当Mongo用于资源网分片设置时,config数据库在内部使用,用于保存分片的相关信息2.2 文档文档是一个键值(key-value)对(即BSON)。

MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的资源网数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点一个简单的文档例子如下:{"site":"www.runoob.com", "name":"菜鸟教程"}

下表列出了 RDBM资源网S 与 MongoDB 对应的术语:

需要注意的是:文档中的键/值对是有序的文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)MongoDB区分类型和大小写M资源网ongoDB的文档不能有重复的键文档的键是字符串。

除了少数例外情况,键可以使用任意UTF-8字符文档键命名规范:键不能含有\0 (空字符)这个字符用来表示键的结尾.和$有特别的意义,只有在特定环境下才资源网能使用以下划线"_"开头的键是保留的(不是严格要求的)。

2.3 集合集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Manageme资源网nt System)中的表格集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

比如,我们可以将以下不同数据结构的资源网文档插入到集合中: {"site":"www.baidu.com"} {"site":"www.google.com","name":"Google"} {"site":"www.runoob.com资源网","name":"菜鸟教程","num":5}

当第一个文档插入时,集合就会被创建合法的集合名集合名不能是空字符串""集合名不能含有\0字符(空字符),这个字符表示集合名的结尾集合名不能以"syste资源网m."开头,这是为系统集合保留的前缀用户创建的集合名字不能含有保留字符。

有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符除非你要访问这种系统创建的集合,否则千万不要在名字里资源网出现$ 如下实例: db.col.findOne() capped collections

Capped collections 就是固定大小的collection它有很高的性能以及队列过期的特性(过期资源网按照插入的顺序). 有点和 "RRD" 概念类似Capped collections是高性能自动的维护对象的插入顺序。

它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建资源网一个capped collection, 指定一个collection的大小,单位是字节collection的数据存储空间值提前分配的。

要注意的是指定的存储大小包含了数据库的头信息db.createC资源网ollection("mycoll", {capped:true, size:100000})在capped collection中,你能添加新的对象。

能进行更新,然而,对象不会增加存储空间如果增加,资源网更新就会失败 数据库不允许进行删除使用drop()方法删除collection所有的行注意: 删除之后,你必须显式的重新创建这个collection在32bit机器中,capped collectio资源网n最大存储为1e9( 1X109)个字节。

2.4 元数据数据库的信息是存储在集合中它们使用了系统的命名空间: dbname.system.* 在MongoDB数据库中名字空间 .system.* 是包资源网含多种系统信息的特殊集合(Collection),如下:。

对于修改系统集合中的对象有如下限制在{{system.indexes}}插入数据,可以创建索引但除此之外该表信息是不可变的(特殊的drop i资源网ndex命令将自动更新相关信息){{system.users}}是可修改的。

{{system.profile}}是可删除的2.5 MongoDB 数据类型下表为MongoDB中常用的几种数据类型。

三、资源网什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统在高负载的情况下,添加更多的节点,可以保证服务器性能MongoDB 旨在为WEB应用提供可扩展的高资源网性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

主要特点M资源网ongoDB的提供了一个面向文档存储,操作起来比较简单和容易你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")资源网来实现更快的排序。

你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片Mo资源网ngo支持丰富的查询表达式。

查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 Mongodb资源网中的Map/reduce主要是用来对数据进行批量处理和聚合操作。

Map和ReduceMap函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理M资源网ap函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。

GridFS是MongoDB中的一个内置功能,可以资源网用于存放大量小文件MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

MongoDB支持各种编程语言:RUB资源网Y,PYTHON,JAVA,C++,PHP,C#等多种语言MongoDB安装简单历史 2007年10月,MongoDB由10gen团队所发展2009年2月首度推出2012年05月23日,MongoDB资源网2.1 开发分支发布了! 该版本采用全新架构,包含诸多增强。

2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库2013年04月23日,MongoDB 2.4.3 发布,此版本包资源网括了一些性能优化,功能增强以及bug修复2013年08月20日,MongoDB 2.4.6 发布,是目前最新的稳定版。

MongoDB 下载你可以在mongodb官网下载该安装包,地址为: http:/资源网/www.mongodb.org/downloadsMonggoDB支持以下平台:OS X 32-bitOS X 64-bit。

Linux 32-bitLinux 64-bitWindows 32-b资源网itWindows 64-bitSolaris i86pcSolaris 64MongoDB 工具有几种可用于MongoDB的管理工具。

监控MongoDB提供了网络和系统监控工具Munin,它作为一个资源网插件应用于MongoDB中Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中基于图形界面的开源工具 Cacti, 用于查看CPU负载, 网络带宽利用率,它也提供资源网了一个应用于监控 MongoDB 的插件。

GUIFang of Mongo – 网页式,由Django和jQuery所构成Futon4Mongo – 一个CouchDB Futon web的mongo资源网db山寨版Mongo3 – Ruby写成MongoHub – 适用于OSX的应用程序。

Opricot – 一个基于浏览器的MongoDB控制台, 由PHP撰写而成Database Master — W资源网indows的mongodb管理工具RockMongo — 最好的PHP语言的MongoDB管理工具,轻量级, 支持多国语言.。

MongoDB 应用案例下面列举一些公司MongoDB的实际应用:Cra资源网iglist上使用MongoDB的存档数十亿条记录FourSquare,基于位置的社交网站,在Amazon EC2的服务器上使用MongoDB分享数据。

Shutterfly,以互联网为基础的社会和个人资源网出版服务,使用MongoDB的各种持久性数据存储的要求bit.ly, 一个基于Web的网址缩短服务,使用MongoDB的存储自己的数据http://spike.com

,一个MTV网络的联营公司, ht资源网tp://spike.com使用MongoDB的Intuit公司,一个为小企业和个人的软件和服务提供商,为小型企业使用MongoDB的跟踪用户的数据http://sourceforge.net

,资源网资源网站查找,创建和发布开源软件免费,使用MongoDB的后端存储http://etsy.com ,一个购买和出售手工制作物品网站,使用MongoDB纽约时报,领先的在线新闻门户网站之一,使用MongoDB资源网。

CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB四、MongoDB的安装4.1 window平台安装 MongoDBMongoDB 提供了可用于 32 位和 6资源网4 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:。

https://www.mongodb.com/download-center#communi资源网ty注意:在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统最新版本也已经没有了 32 位系统的安装文件。

MongoDB for Windows 64-bit 适合 64 位的资源网 Windows Server 2008 R2, Windows 7 , 及最新版本的 Window 系统MongoDB for Windows 32-bit。

适合 32 位的 Window 系统及最资源网新的 Windows Vista 32 位系统上 MongoDB 的数据库最大为 2GBMongoDB for Windows 64-bit Legacy 适合 64 位的 Windows Vista资源网, Windows Server 2003, 及 Windows Server 2008 。

根据你的系统下载 32 位或 64 位的 .msi 文件,下载后双击该文件,按操作提示安装即可。安装过程中,资源网你可以通过点击 "Custom(自定义)" 按钮来设置你的安装目录。

下一步安装 "install mongoDB compass" 不勾选,否则可能要很长时间都一直在执行安装,MongoDB Comp资源网ass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装,下载地址:

https://www.mongodb.com/download-center/compass。

创建数据目录MongoDB将资源网数据目录存储在 db 目录下但是这个数据目录不会主动创建,我们在安装完成后需要创建它请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等 )在本教程中,我们已经在 C 盘安装了 mong资源网odb,现在让我们创建一个 data 的目录然后在 data 目录里创建 db 目录。

c:\>cd c:\ ​ c:\>mkdir data ​ 资源网 c:\>cd data ​ c:\data>mkdir db ​ c:\data>cd db ​ 资源网 c:\data\db>你也可以通过 window 的资源管理器中创建这些目录,而不一定通过命令行。

4.1.1 命令行下运行 MongoDB 服务器为了从命令提示符下运行 MongoDB 服务器,你资源网必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件C:\mongodb\bin\mongod --dbpath c:\data\db。

如果执行成功,会输出如下信息:2015资源网-09-25T15:54:09.212+0800 I CONTROL Hotfix KB2731284 or later update is not installed, will z资源网ero-out data files 2015-09-25T15:54:09.229+0800 I JOURNAL [initandlisten] journal dir=c:\dat资源网a\db\j ournal 2015-09-25T15:54:09.237+0800 I JOURNAL [initandlisten] recover : no jo资源网urnal fil es present, no recovery needed 2015-09-25T15:54:09.290+0800 I JOURNAL [dur资源网ability] Durability thread started 2015-09-25T15:54:09.294+0800 I CONTROL [initandlisten] Mo资源网ngoDB starting : pid=2 488 port=27017 dbpath=c:\data\db 64-bit host=WIN-1VONBJOCE88 资源网2015-09-25T15:54:09.296+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/W indows Serve资源网r 2008 R2 2015-09-25T15:54:09.298+0800 I CONTROL [initandlisten] db version v3.0.6 …资源网…

4.1.2 连接MongoDB我们可以在命令窗口中运行 mongo.exe 命令即可连接上 MongoDB,执行如下命令:C:\mongodb\bin\mongo.exe 4.1.3资源网 配置 MongoDB 服务

管理员模式打开命令行窗口创建目录,执行下面的语句来创建数据库和日志文件的目录mkdir c:\data\db mkdir c:\data\log 资源网 创建配置文件创建一个配置文件该文件必须设置 systemLog.path 参数,包括一些附加的配置选项更好。

例如,创建一个配置文件位于 C:\mongodb\mongod.cfg,其中指定 sy资源网stemLog.path 和 storage.dbPath具体配置内容如下:systemLog: destination: file path: c:\data\log资源网\mongod.log storage: dbPath: c:\data\db 。

4.1.4 安装 MongoDB服务通过执行mongod.exe,使用资源网--install选项来安装服务,使用--config选项来指定之前创建的配置文件C:\mongodb\bin\mongod.exe --config "C:\mongodb\mongod.cfg" 资源网--install 。

要使用备用 dbpath,可以在配置文件(例如:C:\mongodb\mongod.cfg)或命令行中通过 --dbpath 选项指定如果需要,您可以安装 mon资源网god.exe 或 mongos.exe 的多个实例的服务。

只需要通过使用 --serviceName 和 --serviceDisplayName 指定不同的实例名只有当存在足够的系统资源和系统的设资源网计需要这么做启动MongoDB服务net start MongoDB

关闭MongoDB服务net stop MongoDB 移除 MongoDB 服务C:\mongodb\bin\mo资源网ngod.exe --remove 命令行下运行 MongoDB 服务器 和 配置 MongoDB 服务

任选一个方式启动就可以任选一个操作就好4.1.5 MongoDB 后台管理 Sh资源网ell如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,MongoDB Shell是MongoDB自带的交互式Javascript资源网 shell,用来对MongoDB进行操作和管理的交互式环境。

当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):> mongo MongoDB shell ver资源网sion: 3.0.6 connecting to: test …… 由于它是一个JavaScript shell,您可以运行一些简单的算术运算:

> 2资源网 + 2 4 > db 命令用于查看当前操作的文档(数据库):> db test > 插入一些简单的记录资源网并查找它:> db.runoob.insert({x:10}) WriteResult({ "nInserted" : 1 }) > db.runoob.find() 资源网 { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 } >

第一个命令将数字 10 插入到 runoob 集资源网合的 x 字段中4.2 Linux平台安装MongoDBMongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包下载地址:。

https://www.mongodb.co资源网m/download-center#community

下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) curl -O https://fastdl.mongodb.org/资源网linux/mongodb-linux-x86_64-3.0.6.tgz # 下载 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解压 资源网 mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 将解压包拷贝到指定目录 。

MongoDB 的可执行文件位于 bin 目资源网录下,所以可以将其添加到 PATH 路径中:export PATH=/bin:$PATH

为你 MongoDB 的安装路径如本文的 /usr/local/mongodb 4.2.1 创建数据库目录Mon资源网goDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。

以下实例中我们将data目录创建于根目录下(/)注意:资源网/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)mkdir -p /data/db 4.2.2 命令行中运行 MongoDB 服务。

你可以再命令行中执行资源网mongo安装目录中的bin目录执行mongod命令来启动mongdb服务注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定$ ./mongod 2015资源网-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal 2015-09-25T1资源网6:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 资源网 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16 2资源网015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52 2015-09-资源网25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7 。

4.2.3 MongoDB后台资源网管理 Shell如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件MongoDB Shell是MongoDB自带的交互式Javascri资源网pt shell,用来对MongoDB进行操作和管理的交互式环境。

当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):$ cd /usr/local/mongodb/bin 资源网 $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to t资源网he MongoDB shell. ……

由于它是一个JavaScript shell,您可以运行一些简单的算术运算:> 2+2 4 > 3+6 资源网 9 现在让我们插入一些简单的数据,并对插入的数据进行检索:> db.runoob.insert({x:10}) WriteResult({ "nInserted资源网" : 1 }) > db.runoob.find() { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10资源网 } >

第一个命令将数字 10 插入到 runoob 集合的 x 字段中4.2.4 MongoDb web 用户界面MongoDB 提供了简单的 HTTP 用户界面 如果你想启用该功能资源网,需要在启动的时候指定参数 --rest 。

注意:该功能只适用于 MongoDB 3.2 及之前的早期版本$ ./mongod --dbpath=/data/db --rest Mon资源网goDB 的 Web 界面访问端口比服务的端口多1000如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:

http://localhost:2资源网8017。

五、启动Mongodb服务在你的安装目录/bin下,有一个叫mongod.exe的应用程序,这个程序就是用来启动你的mongodb服务器的创建数据库目录在你想要存放数据的地方,新建一个文件夹资源网,如db,我们推荐的数据库目录设置是:

data/ conf -->配置文件目录 mongod.conf -->配置文件 db -->数据库目录 log -->日志文件目录 mongodb.log --资源网>日志记录文件 启动数据库我本地是window10环境,我的mongodb服务安装在

F盘的mongodb文件夹我的数据目录在F的data文件夹启动doc命令,输入一下命令:F:\>mo资源网ngodb/bin F:\mongodb\bin>mongod --path=/data/db输出以下信息:。

最后一行显示"waiting for connections on por资源网t 27017",表明mongodb服务器已经启动,正在27017窗口等待连接再查看f:/data/db文件夹,已出现以下文件:。

说明mongodb服务启动成功将MongoDB服务器作为Windows资源网服务运行像上面那样启动mongodb,发现没办法输入命令行了,这是可以采用打开多个窗口来连接,但这样就太麻烦了,解决办法就是将MongoDB服务器作为Windows服务运行。

输入以下命令:F:\mon资源网godb\bin>mongod --dbpath "f:\data\db" --logpath "f:\data\log\mongodb.log" --serviceName "mongodb" --资源网serviceDisplayName "mongodb" --install

看到了如下输出:2016-10-20T23:32:46.339+0800 I CONTROL log file "f:\da资源网ta\log\mongodb.log" exists; moved to "f:\data\log\mongodb.log.2016-10-20T15-32-46".

说明mongodb服务安装成功启动资源网mongodb服务:F:\mongodb\bin>net start mongodb MongoDB 服务已经启动成功 说明mongodb启动成功由于我们并没有指定m资源网ongodb服务的端口号,所以它启动在默认的。

27017窗口打开浏览器,范围地址http://127.0.0.1:27017/,可看到如下信息It looks like you are trying 资源网to access MongoDB over HTTP on the native driver port. 。

mongodb常用启动参数mongod.exe常用参数如下:

mongod资源网.exe的启动参数,在window环境下和linux环境下并不相同,详见mongod - mongodb启动服务工具六、MongoDB - 连接6.1 启动 MongoDB服务在前面的教程中,我们已经资源网讨论。

了如何启动MongoDB服务,你只需要在MongoDB安装目录的bin目录下执行mongod即可执行启动操作后,mongodb在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被资源网建立后,就会开始打印日志信息。

你可以使用 MongoDB shell 来连接 MongoDB 服务器你也可以使用 PHP 来连接 MongoDB本教程我们会使用 MongoDB shell 来连接 M资源网ongodb 服务,之后的章节我们将会介绍如何通过php 来连接MongoDB服务。

6.2 通过shell连接MongoDB服务你可以通过执行以下命令来连接MongoDB的服务注意:localhost资源网为主机名,这个选项是必须的:mongodb://localhost当你执行以上命令时,你可以看到以下输出结果:。

$ ./mongo MongoDB shell version: 3.0.6 conne资源网cting to: test > mongodb://localhostmongodb://localhost ...

这时候你返回查看运行 ./mongod 命令的窗口,可以看到是从哪里连接到Mong资源网oDB的服务器,您可以看到如下信息: ……省略信息…… 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] allocator: tcmall资源网oc 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/data/db" }资源网 } 2015-09-25T17:22:27.350+0800 I NETWORK [initandlisten] waiting for connections on port 27017 2015资源网-09-25T17:22:36.012+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 co资源网nnection now open) # 该行表明一个来自本机的连接 ……省略信息……

6.3 MongoDB连接命令格式使用用户名和密码连接到MongoDB服务器,你必须使用 username:pas资源网sword@hostname/dbname 格式,username为用户名,password 为密码。

使用用户名和密码连接登陆到默认数据库: $ ./mongo MongoDB shell versi资源网on: 3.0.6 connecting to: test mongodb://admin:123456@localhost/

以上命令中,用户 admin 使用密码 123456 连接到本地的 Mon资源网goDB 服务上输出结果如下所示: > mongodb://admin:123456@localhost/ ... 。

使用用户名和密码连接登陆到指定数据库:连接到指定数据库的格式如下:资源网mongodb://admin:123456@localhost/test6.4 更多连接实例连接本地数据库服务器,端口是默认的mongodb://localhost。

使用用户名fred,密码foob资源网ar登录localhost的admin数据库mongodb://fred:foobar@localhost使用用户名fred,密码foobar登录localhost的baz数据库。

mongodb://资源网fred:foobar@localhost/baz连接 replica pair, 服务器1为http://example1.com服务器2为example2mongodb://example1.co资源网m:27017,。

http://example2.com:27017连接 replica set 三台服务器 (端口 27017, 27018, 和27019):mongodb://localhost资源网,localhost:27018,localhost:27019

连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器mongodb://host1,host2,h资源网ost3/?slaveOk=true直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器。

mongodb://host1,host2,host3/?connect=dire资源网ct;slaveOk=true当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式安全模式连接到localhost:。

mongodb://localhost/?safe=true以安资源网全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2资源网000。

6.5 参数选项说明标准格式:mongodb://[username:password@]host1:port1,...,hostN[:portN]][?options]]标准的连接格式包含了资源网多个选项(options),如下所示:

七、Mongodb的使用7.1 MongoDB 创建数据库MongoDB 创建数据库的语法格式如下:use DATABASE_NAME如果数据库不存在,则创建数据资源网库,否则切换到指定数据库以下实例我们创建了数据库 mongo:。

> use mongo switched to db mongo > db mongo 资源网 > 如果你想查看所有数据库,可以使用 show dbs 命令:> show dbs local 0.078GB test 0.078GB 资源网 >

可以看到,我们刚创建的数据库 mongo 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据> db.mongo.insert({"name":"mongodb中文网"}资源网) WriteResult({ "nInserted" : 1 }) > show dbs local 0.078GB mongo 0.资源网078GB test 0.078GB > 。

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中7.2资源网 MongoDB 删除数据库MongoDB 删除数据库的语法格式如下:db.dropDatabase() 。

删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名以下资源网实例我们删除了数据库 mongo首先,查看所有数据库:> show dbs local 0.078GB mongo 0.078GB test 0.078资源网GB。

接下来我们切换到数据库 mongo> use runoob switched to db mongo >执行删除命令:> db.dropDatabase() { "dropped" : "run资源网oob", "ok" : 1 }

最后,我们再通过 show dbs 命令数据库是否删除成功:> show dbs local 0.078GB test 0.078GB 资源网 > 集合删除语法格式如下: db.collection.drop()

7.3 MongoDB 插入文档插入文档MongoDB 使用 insert() 或 save() 方法向集合中插入文资源网档,语法如下: db.COLLECTION_NAME.insert(document)

实例以下文档可以存储在 MongoDB 的 mongo 数据库 的 col集合中:>db.col.insert({资源网title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库, by: MongoDB中文网, url: 资源网http://www.mongodb.org.cn, tags: [mongodb, database, NoSQL], likes: 100 })

以上资源网实例中 col 是我们的集合名,前一章节我们已经创建过了,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档查看已插入文档:> db.col.find() { 资源网 "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "descrip资源网tion" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.or资源网g.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } 资源网> 。

我们也可以将数据定义为一个变量,如下所示:> document=({title: MongoDB 教程, description: MongoDB 是一个 Nos资源网ql 数据库, by: Mongodb中文网, url: http://www.mongodb.org.cn, tags: [mongodb, data资源网base, NoSQL], likes: 100 });

执行后显示结果如下:{ "title" : "MongoDB 教程", "des资源网cription" : "MongoDB 是一个 Nosql 数据库", "by" : "Mongodb中文网", "url" : "http://www.mongod资源网b.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], 资源网 "likes" : 100 }

执行插入操作:> db.col.insert(document) WriteResult({ "nInserted" : 1 }) > 插入文档你资源网也可以使用 db.col.save(document) 命令。

如果不指定 _id 字段 save() 方法类似于 insert() 方法如果指定 _id 字段,则会更新该 _id 的数据7.4 Mon资源网goDB 删除文档语法remove() 方法的基本语法格式如下所示:

db.collection.remove( , ) 如果你的 MongoDB 是 2.6 版本以后资源网的,语法格式如下:

db.collection.remove( , { justOne: , writeConcern: 资源网} )

参数说明:query :(可选)删除的文档的条件justOne : (可选)如果设为 true 或 1,则只删除一个文档writeConcern :(可选)抛出异常的级别实例以下资源网文档我们执行两次插入操作:。

>db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库, 资源网 by: MongoDB中文网, url: http://www.mongodb.org.cn, tags: [mongodb, database, NoSQL], 资源网 likes: 100 })

使用 find() 函数查询数据:> db.col.find() { "_id" : ObjectId("56066169ade资源网2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网资源网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }资源网 { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "Mo资源网ngoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb"资源网, "database", "NoSQL" ], "likes" : 100 }

接下来我们移除 title 为 MongoDB 教程 的文档: >db.col.remove({title:MongoD资源网B 教程}) WriteResult({ "nRemoved" : 2 }) # 删除了两条数据 >db.col.find() …… # 没有数据

如果你只想删除第一条找到的记录可以设置资源网 justOne 为 1,如下所示:>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 trun资源网cate 命令):

>db.col.remove({}) >db.col.find() >7.5 MongoDB 更新文档update() 方法update() 方法用于资源网更新已存在的文档语法格式如下:db.collection.update( , , { upsert: , multi: 资源网, writeConcern: } )。

参数说明:query : update的查询条件,类似sql update查询内where后面的update :资源网 update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的。

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入o资源网bjNew,true为插入,默认是false,不插入multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

write资源网Concern :可选,抛出异常的级别实例我们在集合 col 中插入如下数据:>db.col.insert({ title: Mongodb 教程, descripti资源网on: MongoDB 是一个 Nosql 数据库, by: Mongodb中文网, url: http://www.mongodb.org.cn, t资源网ags: [mongodb, database, NoSQL], likes: 100 }) 。

接着我们通过 update() 方法来更新标题(title):>db.资源网col.update({title:MongoDB 教程},{$set:{title:MongoDB}}) WriteResult({ "nMatched" : 1, "nUpsert资源网ed" : 0, "nModified" : 1 }) # 输出信息 > db.col.find().pretty() { "_id" : Object资源网Id("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 No资源网sql 数据库", "by" : "Mongodb中文网", "url" : "http://www.mongodb.org.cn", "tags" :资源网 [ "mongodb", "database", "NoSQL" ], "likes" : 100 }资源网 >

可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数资源网为 true >db.col.update({title:MongoDB 教程},{$set:{title:MongoDB}},{multi:true}) 。

save() 方法save资源网() 方法通过传入的文档来替换已有文档语法格式如下:db.collection.save( , { writeConcern: } ) 资源网 。

参数说明:document : 文档数据writeConcern :可选,抛出异常的级别实例以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档资源网数据:>db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB",资源网 "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http资源网://www.mongodb.org.cn", "tags" : [ "mongodb", "NoSQL" ], "li资源网kes" : 110 } ) 。

替换成功后,我们可以通过 find() 命令来查看替换后的数据>db.col.find().pretty() 资源网 { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "des资源网cription" : "MongoDB 是一个 Nosql 数据库", "by" : "Mongo", "url" : "http://www.mongodb.org资源网.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操资源网作查看

https://www.mongodb.org.cn/manual/>7.6 MongoDB 查询文档MongoDB 查询文档使用 find() 方法find() 方法以非结构化的方式来显示所有资源网文档语法

MongoDB 查询数据的语法格式如下:db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件project资源网ion :可选,使用投影操作符指定返回的键。

查询时返回文档中所有键值, 只需省略该参数即可(默认省略)如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:>db.col.资源网find().pretty() pretty() 方法以格式化的方式来显示所有文档。

实例以下实例我们查询了集合 col 中的数据:> db.col.find().pretty() 资源网 { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", 资源网 "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob资源网.com", "tags" : [ "mongodb", "database", "NoSQL" ], 资源网"likes" : 100 }

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档7.6.1 MongoDB 与 RDBMS Where 语句比较如果你熟资源网悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:。

7.6.2 MongoDB AND 条件MongoDB 的 find() 方法可以传入多个键(key),每个键(key资源网)以逗号隔开,即常规 SQL 的 AND 条件语法格式如下:>db.col.find({key1:value1, key2:value2}).pretty() 。

实例以下实例通过 by资源网 和 title 键来查询 菜鸟教程 中 MongoDB 教程 的数据> db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty() 资源网 { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "资源网description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.co资源网m", "tags" : [ "mongodb", "database", "NoSQL" ], "li资源网kes" : 100 }

以上实例中类似于 WHERE 语句:WHERE by=菜鸟教程 AND title=MongoDB 教程7.6.3 MongoDB OR 条件MongoDB O资源网R 条件语句使用了关键字 $or,语法格式如下:

>db.col.find( { $or: [ {key1: value1}, {key2:value2}资源网 ] } ).pretty() 实例以下实例中,我们演示了查询键

by 值为 菜鸟教程 或键 title 值为 MongoDB 教程 的文资源网档>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : Obje资源网ctId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是资源网一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ 资源网 "mongodb", "database", "NoSQL" ], "likes" : 100 } 资源网 > 。

AND 和 OR 联合使用以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: where likes>50 AND (by = 菜鸟教程 OR tit资源网le = MongoDB 教程)

>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pre资源网tty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程"资源网, "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://ww资源网w.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], 资源网 "likes" : 100 }

7.7 MongoDB 条件操作符描述条件操作符用于比较两个表达式并从mongoDB集合中获取数据在本章节中,我们将讨论如何在MongoD资源网B中使用条件操作符MongoDB中条件操作符有:(>) 大于 - $gt。

(=) 大于等于 - $gte(<= ) 小于等于 - $lte我们使用的数据库名称为"runoob" 我们的集合名称为"co资源网l",以下为我们插入的数据为了方便测试,我们可以先使用以下命令清空集合 "col" 的数据:。

db.col.remove({})插入以下数据>db.col.insert({ title资源网: PHP 教程, description: PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

, by: 菜鸟教程, url: http:/资源网/www.runoob.com, tags: [php], likes: 200 }) >db.col.insert({title: J资源网ava 教程, description: Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

, by: 菜鸟教程, 资源网 url: http://www.runoob.com, tags: [java], likes: 150 }) >db.col.in资源网sert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库, by: 菜鸟教程, url: 资源网http://www.runoob.com, tags: [mongodb], likes: 100 })。

使用find()命令查看数据:> db.co资源网l.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" :资源网 "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" 资源网], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "des资源网cription" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "http://www.runo资源网ob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c")资源网, "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://ww资源网w.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }。

7.7.1 MongoDB (>) 大于操作符 - $gt如果你想获取 "col" 集合中资源网 "likes" 大于 100 的数据,你可以使用以下命令:db.col.find({likes : {$gt : 100}})

类似于SQL语句:Select * from col where lik资源网es > 100;输出结果:> db.col.find({likes : {$gt : 100}}) { "_id" : ObjectId("56066542ade2f21f36b03资源网13a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : 资源网"http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade资源网2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。资源网

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } > 7.资源网7.2 MongoDB(>=)大于等于操作符 - $gte

如果你想获取"col"集合中 "likes" 大于等于 100 的数据,你可以使用以下命令:db.col.find({likes : {$gt资源网e : 100}})类似于SQL语句:Select * from col where likes >=100;

输出结果:> db.col.find({likes : {$gte : 100}}) 资源网 { "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建资源网动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" 资源网: 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" :资源网 "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "t资源网ags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" :资源网 "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.co资源网m", "tags" : [ "mongodb" ], "likes" : 100 } > 。

7.7.3 MongoDB (<) 小于操作符 - $lt如果你想获取"col"集合中 "资源网likes" 小于 150 的数据,你可以使用以下命令:db.col.find({likes : {$lt : 150}})

类似于SQL语句:Select * from col where likes资源网 db.col.find({likes : {$lt : 150}}) { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" 资源网: "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.c资源网om", "tags" : [ "mongodb" ], "likes" : 100 }

7.7.4 MongoDB (<=) 小于等于操作符 - $lte如果你想获取"col"集合中 "likes" 资源网小于等于 150 的数据,你可以使用以下命令:db.col.find({likes : {$lte : 150}})

类似于SQL语句:Select * from col where likes db.资源网col.find({likes : {$lte : 150}}) { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "资源网Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "h资源网ttp://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2资源网f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url资源网" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }。

7.7.5 MongoDB 使用 () 查询 - $lt 和 资源网$gt如果你想获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:db.col.find({likes : {$lt :200, $gt : 100}})

类似于资源网SQL语句:Select * from col where likes>100 AND likes db.col.find({likes : {$lt :200, $gt : 100}}) 资源网 { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun 资源网Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "jav资源网a" ], "likes" : 150 } > 7.8 MongoDB $type 操作符

描述在本章节中,我们将继续讨论MongoDB中条件操作符 $type。$type操作符是基于B资源网SON类型来检索集合中匹配的数据类型,并返回结果。MongoDB 中可以使用的类型如下表所示:

我们使用的数据库名称为"runoob" 我们的集合名称为"col",以下为我们插入的数据简单的集合"col资源网":>db.col.insert({ title: PHP 教程, description: PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

, 资源网 by: 菜鸟教程, url: http://www.runoob.com, tags: [php], likes: 200 }) 资源网 >db.col.insert({title: Java 教程, description: Java 是由Sun Microsystems公司于1995年5月推出的高级程资源网序设计语言。

, by: 菜鸟教程, url: http://www.runoob.com, tags: [java], likes: 1资源网50 }) >db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,资源网 by: 菜鸟教程, url: http://www.runoob.com, tags: [mongodb], likes: 100 资源网 })。

使用find()命令查看数据:> db.col.find() { "_id" : ObjectId("56066542ade2f21f36b0313a"), "ti资源网tle" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "http://ww资源网w.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b03资源网13b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : 资源网"菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : Obje资源网ctId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "资源网by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }。

MongoDB 操作符 -资源网 $type 实例如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:db.col.find({"title" : {$type : 2}}) 或资源网 db.col.find({"title" : {$type : string}})

输出结果为:{ "_id" : ObjectId("56066542ade2f21f36b0313a资源网"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "ht资源网tp://www.runoob.com", "tags" : [ "php" ], "likes" : 200 } { "_id" : ObjectId("56066549ade2f2资源网1f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", 资源网"by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 } { "_id"资源网 : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 资源网数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }。

7.9 Mo资源网ngoDB Limit与Skip方法7.9.1 MongoDB Limit() 方法如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一资源网个数字参数,该参数指定从MongoDB中读取的记录条数。

语法limit()方法基本语法如下所示:>db.COLLECTION_NAME.find().limit(NUMBER)实例集合 col 中的数资源网据如下:{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态资源网交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 资源网200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "资源网Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tag资源网s" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "资源网MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com"资源网, "tags" : [ "mongodb" ], "likes" : 100 }。

以下实例为显示查询文档中的两条记录:> db.col.find({},{"title":1,_id:0}).limi资源网t(2) { "title" : "PHP 教程" } { "title" : "Java 教程" } >

注:如果你们没有指定limit()方法中的参数资源网则显示集合中的所有数据7.9.2 MongoDB Skip() 方法我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数资源网字参数作为跳过的记录条数。

语法skip() 方法脚本语法格式如下:>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)实例以下实例只会显示第二条文资源网档数据>db.col.find({},{"title":1,_id:0}).limit(1).skip(1) { "title" : "Java 教程" } >

注:sk资源网ip()方法默认参数为 0 8.0 MongoDB 排序MongoDB sort() 方法在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并资源网使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

语法sort()方法基本语法如下所示:>db.COLLECTION_NAME.find().sort({KEY:1资源网})实例col 集合中的数据如下:{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" :资源网 "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" 资源网], "likes" : 200 } { "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "des资源网cription" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。

", "by" : "菜鸟教程", "url" : "http://www.runo资源网ob.com", "tags" : [ "java" ], "likes" : 150 } { "_id" : ObjectId("5606654fade2f21f36b0313c")资源网, "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://ww资源网w.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }。

以下实例演示了 col 集合中的数据按字段 likes 的降序排列:>db.col.fin资源网d({},{"title":1,_id:0}).sort({"likes":-1}) { "title" : "PHP 教程" } { "title" : "Java 资源网教程" } { "title" : "MongoDB 教程" } >

八、 MongoDB 之spring-mvc整合参考https://blog.csdn.net/hh资源网12211221/article/details/77717364文章九、 MongoDB 之springboot整合

9.1 导入依赖 org.springframework.bo资源网ot spring-boot-starter-web org.springframework.boot spring-boot-starter-da资源网ta-mongodb org.projectlombok lombok 1.16.18

9.2 配置文件spring.application.nam资源网e=mongodb_demo server.port=8080 ​ ​ spring.data.mongodb.uri=mongodb:资源网//localhost:27017/test

9.3 DAO层package com.hellojava.dao; ​ ​ ​ impor资源网t com.hellojava.model.MongoTest; import org.springframework.beans.factory.annotation.Autowir资源网ed; import org.springframework.data.mongodb.core.MongoTemplate; import org.springfra资源网mework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.资源网Query; import org.springframework.data.mongodb.core.query.Update; import org.springf资源网ramework.stereotype.Component; ​ @Component public class MongoTestDao { 资源网 ​ ​ @Autowired private MongoTemplate mongoTemplate; ​ /*资源网* * 创建对象 */ public void saveTest(MongoTest test) { mongoTemplate.sav资源网e(test); } ​ /** * 根据用户名查询对象 * @return */ pu资源网blic MongoTest findTestByName(String name) { Query query=new Query(Criteria.where("name").is资源网(name)); MongoTest mgt = mongoTemplate.findOne(query , MongoTest.class); return mgt;资源网 } ​ /** * 更新对象 */ public void updateTest(MongoTest 资源网test) { Query query=new Query(Criteria.where("id").is(test.getId())); Update update=资源网 new Update().set("age", test.getAge()).set("name", test.getName()); //更新查询返回结果集的第一条 资源网 mongoTemplate.updateFirst(query,update,MongoTest.class); //更新查询返回结果集的所有 // mongoTem资源网plate.updateMulti(query,update,TestEntity.class); } ​ /** * 删除对象 资源网 * @param id */ public void deleteTestById(Integer id) { Query query=new资源网 Query(Criteria.where("id").is(id)); mongoTemplate.remove(query,MongoTest.class); } 资源网 }

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。