MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB属于NoSQL

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

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

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

类似于json的数据形式

MongoDB的主要特点

  • 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安装简单。

NoSQL简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

在现代的计算系统上每天网络上都会产生庞大的数据量。

这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

下载安装MongoDB

官网链接    https://www.mongodb.com/download-center?jmp=nav

启动MongoDB

启动之前要先添加环境变量

MongoDB服务端启动的命令为mongod

配置数据存放的位置, 服务就可以正常的启动

我将配置放在专门的配置文件中

dbpath=E:\mongodb_data\data

启动时指定配置文件

mongod –config c:\mongodb\conf\master.cfg

进入MongoDB的客户端

mongo

数据库操作

show dbs;                  #查看全部数据库

show collections;          #显示当前数据库中的集合(类似关系数据库中的表)

show users;                #查看当前数据库的用户信息

use <db name>;             #切换数据库跟mysql一样

db;或者db.getName();        #查看当前所在数据库

db.help();                 #显示数据库操作命令,里面有很多的命令
db.foo.help(); #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
db.foo.find(); #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find( { a : 1 } ); #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

MongoDB支持的数据类型

Object ID: 对象id
"_id" : ObjectId("5b151f8536409809ab2e6b26") #"5b151f85" 代指的是时间戳,这条数据的产生时间
#"364098" 代指某台机器的机器码,存储这条数据时的机器编号
#"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
#"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
#以上四种标识符拼凑成世界上唯一的ObjectID
#只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
#可以得到以上四种信息 #注意:这个类型是不可以被JSON序列化的 String: 字符串,必须是utf-8
db.table01.insertOne({"name": "sath"}) Boolean:布尔值,true 或者 false (这里有坑哦~在我们Python中 True False 首字母大写)
db.teble01.insertOne({"status": true}) Integer:整数 (Int32 Int64 你们就知道有个Int就行了 ,一般我们用Int32)
db.table01.insert({"age":parseInt("")}) # 字符串会被转成int32 Double:浮点数 (没有float类型,所有小数都是Double)
默认是添加的所有的数数字都是Double Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
db.table01.insert({"hobby":["python","go", "java"]}) Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
db.table01.insert({"": {"name":"sath", "age":35}}) Null:空数据类型 , 一个特殊的概念,None Null
db.table01.insert({"is_null": null}) Timestamp:时间戳
db.table01.insert({"t_time":new Date().valueOf()}) Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
db.table01.insert({"t_time":Date()})
Mon Dec 24 2018 19:23:34 GMT+0800 db.table01.insert({"t_time":new Date()})
2018/12/24 下午19:23:19

MongoDB常用语法


1. db.table01.insert({"name":"wangjianwei", "age":22}) # 官方不推荐
# 官方推荐以下两种方式
2. 插入一条数据
db.insertOne({"name":"zhangsan", "age":78}) # 会返回添加进去的对象
{
"acknowledged" : true,
"insertedId" : ObjectId("5c2091e508d12e25ff01af8d")
}
3. 插入多条数据
db.table01.insertMany([{"name":"zhangsan", "age":78},{"name":"lisi", "age":36}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5c20924e08d12e25ff01af8e"),
ObjectId("5c20924e08d12e25ff01af8f")
]
}


1. 删除所有
db.table01.remove({}) 官方推荐写法
2. 删除一个
db.table01.deleteOne({"hobby":{$all:["抽烟"]}}) 3.删除所有匹配到的
db.table01.deleteMany({"hobby":{$all:["抽烟"]}}) 4. 删除表
db.table01.drop()


语法格式:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
query : update的查询条件
update : 要更新的内容
upsert : 可选,这个参数的意思是,如果不存在当前更新的记录,是否插入你要更新的值到数据中,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。 官方推荐的写法
更新第一条数据
db.table01.updateOne({"age":{$gt:70}}, {$set:{"age":0}}) 更新所有的数据
db.table01.updateMany({"age":{$gt:70}}, {$set:{"age":0}})

1. 查询所有
db.table01.find() 2. db.table01.find().pretty() # 当查询到的结果可读性更高 3. 根据条件查询
db.table01.find({"age":78}) # find后面可以跟条件 4. 多个条件之间使用and的关系
db.table01.find({"age":78, "name": "wangwu"}) # 多个条件之间是and的关系 5. 多个条件之间使用or关系
db.table01.find({$or:[{"age":78},{"name":"zhangsan"}]}
多个条件放在列表中, 每一个条件是一个字典 6. and和or一块使用
db.table01.find({"addr":"ShangHai",$or:[{"name":"sath"},{"age": 88}]}) 7. in条件查询
db.table01.find({"name": {$in: ["zhangsan", "sath"]}})
name的值在某个列表中 8. 比较大小的方法
8.1 大于
db.table01.find({"age": {$gt: 60}})
8.2 大于等于
db.table01.find({"age": {$gte: 53}})
8.3 小于
db.table01.find({"age": {$lt: 53}})
8.4 小于等于
db.table01.find({"age": {$lte: 36}})
8.5 不等于
db.table01.find({"age": {$ne: 53}})
8.6 等于
db.table01.find({"age": {$eq: 53}})
db.table01.find({"age":53})
8.7 9.
db.table01.find({"hobby":{$all:["喝酒", "烫头"]}})
# all: 包含列表中所有的条件的 10.
db.table01.find({"name":"lisi"}, {"age":0})
# 过滤条件为name=lisi, 后面的age=0 表示查询的结果中不要age的值,
# 使用find或者findOne都可以加这个条件, pymongo也是一样

10.模糊匹配

db.col.find({title: {"$regex": "59450"}})
db.col.find({title:/教/}) # 模糊匹配
db.col.find({title:/^教/}) # 匹配开头
db.col.find({title:/教$/}) # 匹配末尾

 

备份与恢复

备份

保证数据库正在运行
mongodump -h 127.0.0.1 -o E:\db # 备份所有的数据库
mongodump --collection table01 --db day120 -o E:\db2 # 备份指定数据库中的的指定集合(表)

常用参数

-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 -d:
需要备份的数据库实例,例如:test -o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

恢复

mongorestore  -h 127.0.0.1 E:\db

常用参数

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017 --db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2 --drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦! <path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。 你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。 --dir:
指定备份的目录 你不能同时指定 <path> 和 --dir 选项。

参考:  http://www.runoob.com/mongodb/mongodb-intro.html

MongoDB怎么用?的更多相关文章

  1. 【翻译】MongoDB指南/聚合——聚合管道

    [原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...

  2. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  3. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  4. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  5. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  6. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. MongoDB系列(二):C#应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  8. MongoDB系列(一):简介及安装

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

  9. [原]分享一下我和MongoDB与Redis那些事

    缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...

  10. 用MongoDB分析合肥餐饮业

    看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...

随机推荐

  1. SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)

    复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...

  2. Visual Studio强行修改运行平台和注意事项

    默认情况下,会发现项目属性中只有一个Any CPU可供选择,无法修改运行平台. 解决方法如下: 右键“解决方案”,选择“属性”,此时发现每一个项目的平台依然只有Any CPU,点击右上角“配置管理器” ...

  3. 在 Windows Server Container 中运行 Azure Storage Emulator(一):能否监听自定义地址?

    我要做什么? 改 ASE 的监听地址.对于有强迫症的我来说,ASE 默认监听的是 127.0.0.1:10000-10002,这让我无法接受,所以我要将它改成域名 + 80 端口的方式: 放到容器中. ...

  4. Compare DML To Both REDO And UNDO Size

    SUMMARY you can remember undo rule  the same to redo if you want demo rule that you can look up the ...

  5. 25个最佳的SSH命令

    参考文献地址(SSH原理与运用(一):远程登录): http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 参考文献地址(SSH原理与 ...

  6. Matlab基础 数组

    一.引用 数组元素引用,下标从1开始 如y(3)表示第3个元素 二.扩充 扩充2*3矩阵为3*3矩阵,并且给a(3,3)赋值为9 三.提取 数组按列存储 全下标变化为单下标: sub2ind((m,n ...

  7. POJ | Boolean Expressions

    总时间限制: 1000ms  内存限制: 65536kB 描述The objective of the program you are going to produce is to evaluate ...

  8. 【重构.改善既有代码的设计】14、总结&读后感

    14.总结 首先,这是一本太老的书,很多观点已经被固化或者过时了.但核心观点没有问题,虽然大多数观点已经被认为是理所当然的事情了.   重构的定义 重构分几种: 1.狭义的代码重构   就是本书讲的, ...

  9. swift 第一个IOS应用程序

    swift 出来也有一阵子了,一直没有时间来研究.简单的看了看.随手写几篇文章.特此声明:本博客纯属个人学习,有不足之处,属于正常,希望多多见谅. 第一个IOS应用程序开发 一.准备工作: (1)Ma ...

  10. 【小M的作物】

    这是一道我好像没写过的最小割 这道题如果没有那\(m\)条限制,我们完全可以贪心来做 但是硬要用网络流怎么办 可以转化为最小割模型 我们将源点\(S\)表示为耕地\(A\),汇点\(T\)表示为耕地\ ...