Boats against the current,borne forward!

MongoDB教程

Posted on By 郑诚

什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

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

img

主要特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

安装MongoDB

MongoDB卡住问题

注意:最后一步时,左下角的勾没有去掉,mongodb compass是图形化管理界面,下载它需要很久

http://www.runoob.com/mongodb/mongodb-window-install.html

MongoDB 下载

MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center#community

创建数据目录

MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下

D:\data\db

命令行下运行 MongoDB 服务器

为了从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe 文件。

D:\mongodb\bin\mongod --dbpath D:\data\db 

连接MongoDB

我们可以在命令窗口中运行 mongo.exe 命令即可连接上 MongoDB,执行如下命令:

D:\mongodb\bin\mongo.exe 

配置 MongoDB 服务

管理员模式打开命令行窗口,创建目录,执行下面的语句来创建数据库和日志文件的目录

mkdir c:\data\db mkdir c:\data\log 

创建配置文件

创建一个配置文件。该文件必须设置 systemLog.path 参数,包括一些附加的配置选项更好。

例如,创建一个配置文件位于 C:\mongodb\mongod.cfg,其中指定 systemLog.path 和 storage.dbPath。具体配置内容如下:

systemLog:     
	destination: file    
	path: 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 服务

C:\mongodb\bin\mongod.exe --remove 

mongodb指令

学习mongodb:首先运行服务器,用来开启mongodb数据库,再运行客户端,客户端可以用来查询数据。mongodb常用的一些指令如下所示。

查找所有数据库:show dbs

连接到指定数据库:use beaglebone

查看当前连接的数据库:db

展示集合:show collections

查找指定集合的所有数据: db.volts_3.find() db.tags_3.find()

查找第一条数据:db.volts_3.findOne()

查找指定属性的数据:db.volts_5.find({“device_no”:1})

修改指定数据:db.tags_5.update({“_id”:ObjectId(“5bfa621b89f938208ca039da”)},{$set:{“tag”:”discard”}})

删除这个数据库中的集合:db.volts_6.drop()

remove函数中添加删除条件:db.集合名.remove({})

MongoDB导出表格

进入mongoDB的bin目录下打开cmd运行如下代码:

./mongoexport -d 数据库名 -c 集合名 –csv -f 要导出的字段名,每个字段名以逗号隔开 -o 具体地址(如果不加具体地址,则默认为导出到bin目录下)/要导出的文件名.csv

例如:

mongoexport -d beaglebone -c volts_6 -f _id,voltage,device_no,time –csv -o “C:/Users/Zheng Cheng/Desktop/vibrate.csv”

mongoexport -d beaglebone -c tags_5 -f _id,inittime,termtime,tag –csv -o “C:/Users/Zheng Cheng/Desktop/tag.csv”

MongoDB导出json数据

进入mongoDB的bin目录下打开cmd运行如下代码:

mongoexport -d beaglebone -c volts_5 -o “C:/Users/Zheng Cheng/Desktop/volts_5.json”

mongoexport -d beaglebone -c tags_5 -o “C:/Users/Zheng Cheng/Desktop/tags_5.json”

MongoDB导入json数据

进入mongoDB的bin目录下打开cmd运行如下代码:

mongoimport –db beaglebone –collection tags_4 –type json –file “D:\Offer\BBDetection\data/tags_4.json”

mongoimport –db beaglebone –collection volts_4 –type json –file “D:\Offer\BBDetection\data/volts_4.json”

MongoDB概念解析

document:文档对象,等同于关系型数据库table中的一行记录

field: 键值对,等同于关系型数据库中table的一个column

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins   表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

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

img

MongoDB Map Reduce

个人总结:map映射,表示把数据形成一对一的键值对,而reduce规约,表示把相同键的数据合并到一起。

http://www.runoob.com/mongodb/mongodb-map-reduce.html

Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。

MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。

MapReduce 命令

以下是MapReduce的基本语法:

>db.collection.mapReduce(
   function() {emit(key,value);},  //map 函数
   function(key,values) {return reduceFunction},   //reduce 函数
   {
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
) 

使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。

Map 函数必须调用 emit(key, value) 返回键值对。

参数说明:

  • map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
  • reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
  • out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
  • query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
  • sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
  • limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

以下实例在集合 orders 中查找 status:”A” 的数据,并根据 cust_id 来分组,并计算 amount 的总和。

img