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. Lua 5.3 参考手册

    转自:http://www.runoob.com/manual/lua53doc/manual.html 1 – 简介 Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设 ...

  2. Linux /etc/fstab文件

    一,作用 /etc/fstab是用来存放文件系统的静态信息的文件,当系统启动时,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂在到执行的目录 二,挂载的限制 1,根目录是必须挂载 ...

  3. java笔记--匿名内部类和静态内部类的理解和使用

    匿名内部类 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889467.html  "谢谢-- 1.由于局部内部类并不可见 ...

  4. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)

    前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详细介绍 Nginx + PHP 安装.配置.使用的资料之一,为推动 Nginx ...

  5. cmd命令提示符大全(干货)

    cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Se ...

  6. except but

    He didn't speak anything but Greek... 他只会说希腊语.The crew of the ship gave them nothing but bread to ea ...

  7. Kafka生产者producer简要总结

    Kafka producer在设计上要比consumer简单,不涉及复杂的组管理操作,每个producer都是独立进行工作的,与其他producer实例之间没有关联.Producer的主要功能就是向某 ...

  8. codeforces 803G Periodic RMQ Problem

    codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...

  9. python时间模块和random模块

    模块:用一坨代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能,可能需要多个函数才能 ...

  10. angularJs的作用域和依赖注入

    一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找  &rootScope这是全局作用域 <!DOCTYPE HTML&g ...