网站建设提供的网站资料,新网网站建设资料,淄博网站建设选择臻动传媒,网站logo的作用一#xff1a;NoSql数据库 什么是NoSQL? NoSQL#xff0c;指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写#xff0c;是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。#xff08;例如谷歌或Facebook每天为他们的用户收… 一NoSql数据库 什么是NoSQL? NoSQL指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。例如谷歌或Facebook每天为他们的用户收集万亿比特的数据。这些类型的数据存储不需要固定的模式无需多余操作就可以横向扩展。 为什么使用NoSQL ? 今天我们可以通过第三方平台如Google,Facebook等可以很容易的访问和抓取数据。用户的个人信息社交网络地理位置用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。 CAP定理CAP theorem 在计算机科学中, CAP定理CAP theorem, 又被称作 布鲁尔定理Brewers theorem, 它指出对于一个分布式计算系统来说不可能同时满足以下三点: 一致性(Consistency) (所有节点在同一时间具有相同的数据)可用性(Availability) (保证每个请求不管成功或者失败都有响应)分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)CAP理论的核心是一个分布式系统不可能同时很好的满足一致性可用性和分区容错性这三个需求最多只能同时较好的满足两个。 因此根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类 CA - 单点集群满足一致性可用性的系统通常在可扩展性上不太强大。CP - 满足一致性分区容忍性的系统通常性能不是特别高。AP - 满足可用性分区容忍性的系统通常可能对一致性要求低一些。NoSQL的优点/缺点 优点: - 高可扩展性- 分布式计算- 低成本- 架构的灵活性半结构化数据- 没有复杂的关系缺点: - 没有标准化- 有限的查询功能到目前为止- 最终一致是不直观的程序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 XMLBaseX高效的存储XML数据并支持XML的内部查询语法比如XQuery,Xpath。二MongoDB MongoDB 是由C语言编写的是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下添加更多的节点可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档数据结构由键值(keyvalue)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档数组及文档数组。 适用场景 1.数据缓存 2.JSON格式的数据 3.高伸缩性场景 4.弱事务类型业务 Mongodb更多适合于大数据量高并发弱事务的互联网应用其内置的水平扩展机制提供了从几百万到十亿级别的数据处理能力可以很好的满足Web2.0和移动互联网应用的数据存储要求。 应用情况 版本说明 比如3.1.0 第二个数是奇数为测试版偶数为稳定版。 Linux下安装 创建目录 mkdir mongodb 下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz 解压 tar -zxvf mongodb-linux-x86_64-4.0.0.tgz 查看路径 [rootZhuJi mongodb-linux-x86_64-4.0.0]# pwd
/usr/local/mongodb/mongodb-linux-x86_64-4.0.0 MongoDB 的可执行文件位于 bin 目录下所以可以将其添加到 PATH 路径中 注意export命令只对此次会话有效。 export PATH/usr/local/mongodb/mongodb-linux-x86_64-4.0.0/bin:$PATH 创建数据库目录 MongoDB的数据存储在data目录的db目录下但是这个目录在安装过程不会自动创建所以你需要手动创建data目录并在data目录中创建db目录。 mkdir data 创建日志目录 mkdir log 启动程序mongod命令 mongod --dbpath data --logpath log/mongod.log -logappend --fork 你也可以把启动命令写入start.sh文件 echo mongod --dbpath data --logpath log/mongod.log -logappend --fork start.sh 登录数据库 mongo 示例 $ ./mongo
MongoDB shell version: 3.0.6
connecting to: test小结 创建文件夹data用来存储数据库的数据文件。 创建文件夹log用来存储数据库的日志文件。 创建文件夹bin用来存储数据库的可执行文件。 创建文件夹conf用来存储数据库的配置文件。 三概念 MongoDB概念解析 不管我们学习什么数据库都应该学习其中的基础概念在mongodb中基本的概念是文档、集合、数据库下面我们挨个介绍。 下表将帮助您更容易理解Mongo中的一些概念 SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。 数据类型描述String字符串。存储数据常用的数据类型。在 MongoDB 中UTF-8 编码的字符串才是合法的。Integer整型数值。用于存储数值。根据你所采用的服务器可分为 32 位或 64 位。Boolean布尔值。用于存储布尔值真/假。Double双精度浮点值。用于存储浮点值。Min/Max keys将一个值与 BSON二进制的 JSON元素的最低值和最高值相对比。Array用于将数组或列表或多个值存储为一个键。Timestamp时间戳。记录文档修改或添加的具体时间。Object用于内嵌文档。Null用于创建空值。Symbol符号。该数据类型基本上等同于字符串类型但不同的是它一般用于采用特殊符号类型的语言。Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间创建 Date 对象传入年月日信息。Object ID对象 ID。用于创建文档的 ID。Binary Data二进制数据。用于存储二进制数据。Code代码类型。用于在文档中存储 JavaScript 代码。Regular expression正则表达式类型。用于存储正则表达式。四命令 数据库命令 show dbs 命令可以显示所有数据的列表。 执行 db 命令可以显示当前数据库对象或集合。 运行use命令可以连接到一个指定的数据库。 show dbs;
admin 0.000GB
config 0.000GB
local 0.000GBdb
testuse local
switched to db localdb
local有一些数据库名是保留的可以直接访问这些有特殊作用的数据库。 admin 从权限的角度来看这是root数据库。要是将一个用户添加到这个数据库这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行比如列出所有的数据库或者关闭服务器。local: 这个数据永远不会被复制可以用来存储限于本地单台服务器的任意集合config: 当Mongo用于分片设置时config数据库在内部使用用于保存分片的相关信息。创建数据库 如果数据库不存在则创建数据库否则切换到指定数据库。 use demo 插入一条数据 db.demo.insert({name:菜鸟先飞}) 展示数据库 show dbs MongoDB 中默认的数据库为 test如果你没有创建新的数据库集合将存放在 test 数据库中。 删除数据库 MongoDB 删除数据库的语法格式如下 db.dropDatabase() 删除当前数据库默认为 test你可以使用 db 命令查看当前数据库名。 删除集合 集合删除语法格式如下 db.collection.drop() 实例 show collections
demodb.demo.drop()
trueshow collections 创建集合 语法格式 db.createCollection(name, options) 参数说明 name: 要创建的集合名称options: 可选参数, 指定有关内存大小及索引的选项options 可以是如下参数 字段类型描述capped布尔可选如果为 true则创建固定集合。固定集合是指有着固定大小的集合当达到最大值时它会自动覆盖最早的文档。 当该值为 true 时必须指定 size 参数。autoIndexId布尔可选如为 true自动在 _id 字段创建索引。默认为 false。size数值可选为固定集合指定一个最大值以字节计。 如果 capped 为 true也需要指定该字段。max数值可选指定固定集合中包含文档的最大数量。在插入文档时MongoDB 首先检查固定集合的 size 字段然后检查 max 字段。 实例 不带参 db.createCollection(runoob) 带参 db.createCollection(mycol, {capped : true, autoIndexId : true, size : 6142800, max : 10000}) 在 MongoDB 中你不需要创建集合。当你插入一些文档时MongoDB 会自动创建集合。 db.mycol2.insert({name : 菜鸟教程}) 查看已有集合 show collections 或者 show tables 插入文档 MongoDB 使用 insert() 或 save() 方法向集合中插入文档语法如下 db.COLLECTION_NAME.insert(document) 实例 以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中 db.col.insert({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: 菜鸟教程,url: http://www.runoob.com,tags: [mongodb, database, NoSQL],likes: 100
}) 以上实例中 col 是我们的集合名如果该集合不在该数据库中 MongoDB 会自动创建该集合并插入文档。 查看已插入文档 db.col.find() 打印 { _id : ObjectId(56064886ade2f21f36b03134), title : MongoDB 教程, description : MongoDB 是一个 Nosql 数据库, by : 菜鸟教程, url : http://www.runoob.com, tags : [ mongodb, database, NoSQL ], likes : 100 } 我们也可以将数据定义为一个变量如下所示 document({title: MongoDB 教程, description: MongoDB 是一个 Nosql 数据库,by: 教程,url: http://www.runoob.com,tags: [mongodb, database, NoSQL],likes: 100
}); 执行插入操作 db.col.insert(document) 更新文档 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: 教程,url: http://www.runoob.com,tags: [mongodb, database, NoSQL],likes: 100
}) 接着我们通过 update() 方法来更新标题(title): db.col.update({title:MongoDB 教程},{$set:{title:MongoDB}}) 以上语句只会修改第一条发现的文档如果你要修改多条相同的文档则需要设置 multi 参数为 true。 db.col.update({title:MongoDB 教程},{$set:{title:MongoDB}},{multi:true}) 更多实例 只更新第一条记录 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 ); 在3.2版本开始MongoDB提供以下更新集合文档的方法 db.collection.updateOne() 向指定集合更新单个文档db.collection.updateMany() 向指定集合更新多个文档save() 方法 save() 方法通过传入的文档来替换已有文档。语法格式如下 db.collection.save(document,{writeConcern: document}
) 参数说明 document : 文档数据。writeConcern :可选抛出异常的级别。实例 以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据 db.col.save({_id : ObjectId(5b4df2a53e3e9f9874019902),title : MongoDB,description : MongoDB 是一个 Nosql 数据库,by : Runoob,url : http://www.runoob.com,tags : [mongodb,NoSQL],likes : 110
}) 抛出异常的级别 WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常没有服务器错误异常WriteConcern.SAFE:抛出网络错误异常、服务器错误异常并等待服务器完成写操作。WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常并等待一个主服务器完成写操作。WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常写操作等待服务器将数据刷新到磁盘。WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常写操作等待服务器提交到磁盘的日志文件。WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常等待至少2台服务器完成写操作。删除文档 语法 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: 菜鸟教程,url: http://www.runoob.com,tags: [mongodb, database, NoSQL],likes: 100
}) 使用 find() 函数查询数据 db.col.find() 接下来我们移除 title 为 MongoDB 教程 的文档 db.col.remove({title:MongoDB 教程}) 如果你想删除所有数据可以使用以下方式类似常规 SQL 的 truncate 命令 db.col.remove({}) 推荐使用delete() remove() 方法已经过时了现在官方推荐使用 deleteOne() 和 deleteMany() 方法。 如删除集合下全部文档 db.col.deleteMany({}) 删除 status 等于 A 的全部文档 db.col.deleteMany({ status : A }) 删除 status 等于 D 的一个文档 db.col.deleteOne( { status: D } ) 查询文档 MongoDB 查询文档使用 find() 方法。 find() 方法以非结构化的方式来显示所有文档。 语法 MongoDB 查询数据的语法格式如下 db.collection.find(query, projection) query 可选使用查询操作符指定查询条件projection 可选使用投影操作符指定返回的键。查询时返回文档中所有键值 只需省略该参数即可默认省略。如果你需要以易读的方式来读取数据可以使用 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() 方法它只返回一个文档。 MongoDB 与 RDBMS Where 语句比较 如果你熟悉常规的 SQL 数据通过下表可以更好的理解 MongoDB 的条件语句查询 操作格式范例RDBMS中的类似语句等于{key:value}db.col.find({by:菜鸟教程}).pretty()where by 菜鸟教程小于{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 ! 50AND 条件 MongoDB 的 find() 方法可以传入多个键(key)每个键(key)以逗号隔开即常规 SQL 的 AND 条件。 语法格式如下 db.col.find({key1:value1, key2:value2}).pretty() 类似于 WHERE 语句WHERE by教程 AND titleMongoDB 教程 OR 条件 MongoDB OR 条件语句使用了关键字 $or,语法格式如下 db.col.find({$or: [{key1: value1}, {key2:value2}]}
).pretty() 实例 以下实例中我们演示了查询键 by 值为 教程 或键 title 值为 MongoDB 教程 的文档。 db.col.find({$or:[{by:教程},{title: MongoDB 教程}]}).pretty() AND 和 OR 联合使用 以下实例演示了 AND 和 OR 联合使用类似常规 SQL 语句为 where likes50 AND (by 教程 OR title MongoDB 教程) db.col.find({likes: {$gt:50}, $or: [{by: 教程},{title: MongoDB 教程}]}).pretty() projection 参数的使用方法 db.collection.find(query, projection) 若不指定 projection则默认返回所有键指定 projection 格式如下有两种模式 db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键不返回其他键
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键 _id 键默认返回需要主动指定 _id:0 才会隐藏 实例 db.col.find({likes: {$gt:50}}, {_id:0}).pretty() 返回没有_id的结果 {title : MongoDB 教程,description : MongoDB 是一个 Nosql 数据库,by : 教程,url : http://www.runoob.com,tags : [mongodb,database,NoSQL],likes : 100
} 两种模式不可混用因为这样的话无法推断其他键是否应返回 db.collection.find(query, {title: 1, by: 0}) // 错误 只能全1或全0除了在inclusion模式时可以指定_id为0 db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确 条件操作符 描述 条件操作符用于比较两个表达式并从mongoDB集合中获取数据。 在本章节中我们将讨论如何在MongoDB中使用条件操作符。 MongoDB中条件操作符有 () 大于 - $gt() 小于 - $lt() 大于等于 - $gte( ) 小于等于 - $lte() 大于操作符 - $gt 如果你想获取 col 集合中 likes 大于 100 的数据你可以使用以下命令 db.col.find({likes : {$gt : 100}}) 类似于SQL语句 Select * from col where likes 100; () 和 () 查询 - $lt 和 $gt 如果你想获取col集合中 likes 大于100小于 200 的数据你可以使用以下命令 db.col.find({likes : {$lt :200, $gt : 100}}) 类似于SQL语句 Select * from col where likes100 AND likes200; $type 操作符 MongoDB 中可以使用的类型如下表所示 类型数字备注Double1String2Object3Array4Binary data5Undefined6已废弃。Object id7Boolean8Date9Null10Regular Expression11JavaScript13Symbol14JavaScript (with scope)1532-bit integer16Timestamp1764-bit integer18Min key255Query with -1.Max key127实例 如果想获取 col 集合中 title 为 String 的数据你可以使用以下命令 db.col.find({title : {$type : 2}}) Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录可以使用MongoDB的Limit方法limit()方法接受一个数字参数该参数指定从MongoDB中读取的记录条数。 语法 limit()方法基本语法如下所示 db.COLLECTION_NAME.find().limit(NUMBER) Skip() 方法 我们除了可以使用limit()方法来读取指定数量的数据外还可以使用skip()方法来跳过指定数量的数据skip方法同样接受一个数字参数作为跳过的记录条数。 语法 skip() 方法脚本语法格式如下 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) 实例** 以下实例只会显示第二条文档数据 db.col.find({},{title:1,_id:0}).limit(1).skip(1) 排序 sort() 方法 在 MongoDB 中使用 sort() 方法对数据进行排序sort() 方法可以通过参数指定排序的字段并使用 1 和 -1 来指定排序的方式其中 1 为升序排列而 -1 是用于降序排列。 语法 sort()方法基本语法如下所示 db.COLLECTION_NAME.find().sort({KEY:1}) 索引 索引通常能够极大的提高查询的效率如果没有索引MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。 这种扫描全集合的查询效率是非常低的特别在处理大量的数据时查询可以要花费几十秒甚至几分钟这对网站的性能是非常致命的。 索引是特殊的数据结构索引存储在一个易于遍历读取的数据集合中索引是对数据库表中一列或多列的值进行排序的一种结构 createIndex() 方法 MongoDB使用 createIndex() 方法来创建索引。 注意在 3.0.0 版本前创建索引方法为 db.collection.ensureIndex()之后的版本使用了 db.collection.createIndex() 方法ensureIndex() 还能用但只是 createIndex() 的别名。 语法 createIndex()方法基本语法格式如下所示 db.collection.createIndex(keys, options) 语法中 Key 值为你要创建的索引字段1 为指定按升序创建索引如果你想按降序来创建索引指定为 -1 即可。 实例 db.col.createIndex({title:1}) createIndex() 方法中你也可以设置使用多个字段创建索引关系型数据库中称作复合索引。 db.col.createIndex({title:1,description:-1}) createIndex() 接收可选参数可选参数列表如下 ParameterTypeDescriptionbackgroundBoolean建索引过程会阻塞其它数据库操作background可指定以后台方式创建索引即增加 background 可选参数。 background 默认值为false。uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.namestring索引的名称。如果未指定MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。dropDupsBoolean在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.sparseBoolean对文档中不存在的字段数据不启用索引这个参数需要特别注意如果设置为true的话在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.expireAfterSecondsinteger指定一个以秒为单位的数值完成 TTL设定设定集合的生存时间。vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。weightsdocument索引权重值数值在 1 到 99,999 之间表示该索引相对于其他索引字段的得分权重。default_languagestring对于文本索引该参数决定了停用词及词干和词器的规则的列表。 默认为英语language_overridestring对于文本索引该参数指定了包含在文档中的字段名语言覆盖默认的language默认值为 language.实例 在后台创建索引 db.values.createIndex({open: 1, close: 1}, {background: true}) 通过在创建索引时加 background:true 的选项让创建工作在后台执行 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等)并返回计算后的数据结果。有点类似sql语句中的 count(*)。 aggregate() 方法 MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示 db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION) 管道的概念 管道在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管道操作符处理后前五个文档被过滤掉。 数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。 mongodump命令可以通过参数指定导出的数据量级转存的服务器。 语法 mongodump命令脚本语法如下 mongodump -h dbhost -d dbname -o dbdirectory -h MongDB所在服务器地址例如127.0.0.1当然也可以指定端口号127.0.0.1:27017-d 需要备份的数据库实例例如test-o 备份的数据存放位置例如c:\data\dump当然该目录需要提前建立在备份完成后系统自动在dump目录下建立一个test目录这个目录里面存放该数据库实例的备份数据。实例 在本地使用 27017 启动你的mongod服务。打开命令提示符窗口进入MongoDB安装目录的bin目录输入命令mongodump: mongodump 数据恢复 mongodb使用 mongorestore 命令来恢复备份的数据。 语法 mongorestore命令脚本语法如下 mongorestore -h hostname:port -d dbname path --host :port, -h :port MongoDB所在服务器地址默认为 localhost:27017--db , -d 需要恢复的数据库实例例如test当然这个名称也可以和备份时候的不一样比如test2--drop 恢复的时候先删除当前数据然后恢复备份的数据。就是说恢复后备份后添加修改的数据都会被删除慎用哦path mongorestore 最后的一个参数设置备份数据所在位置例如c:\data\dump\test。 你不能同时指定 path和 --dir 选项--dir也可以设置备份目录。--dir 指定备份的目录 你不能同时指定path和 --dir 选项。接下来我们执行以下命令: mongorestore 监控 在你已经安装部署并允许MongoDB服务后你必须要了解MongoDB的运行情况并查看MongoDB的性能。这样在大流量得情况下可以很好的应对并保证MongoDB正常运作。 MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况。 mongostat 命令 mongostat是mongodb自带的状态检测工具在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态并输出。如果你发现数据库突然变慢或者有其他问题的话你第一手的操作就考虑采用mongostat来查看mongo的状态。 启动你的Mongod服务进入到你安装的MongoDB目录下的bin目录 然后输入mongostat命令如下所示 mongostat mongotop 命令 mongotop也是mongodb下的一个内置工具mongotop提供了一个方法用来跟踪一个MongoDB的实例查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下mongotop返回值的每一秒。 启动你的Mongod服务进入到你安装的MongoDB目录下的bin目录 然后输入mongotop命令如下所示 mongotop 输出结果字段说明 ns 包含数据库命名空间后者结合了数据库名称和集合。db 包含数据库的名称。名为 . 的数据库针对全局锁定而非特定数据库。total mongod花费的时间工作在这个命名空间提供总额。read 提供了大量的时间这mongod花费在执行读操作在此命名空间。write 提供这个命名空间进行写操作这mongod花了大量的时间。转载于:https://www.cnblogs.com/yueshutong/p/11491106.html