MongoDB怎么用?
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怎么用?的更多相关文章
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
- [原]分享一下我和MongoDB与Redis那些事
缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...
- 用MongoDB分析合肥餐饮业
看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...
随机推荐
- Lua 5.3 参考手册
转自:http://www.runoob.com/manual/lua53doc/manual.html 1 – 简介 Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设 ...
- Linux /etc/fstab文件
一,作用 /etc/fstab是用来存放文件系统的静态信息的文件,当系统启动时,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂在到执行的目录 二,挂载的限制 1,根目录是必须挂载 ...
- java笔记--匿名内部类和静态内部类的理解和使用
匿名内部类 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3889467.html "谢谢-- 1.由于局部内部类并不可见 ...
- Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详细介绍 Nginx + PHP 安装.配置.使用的资料之一,为推动 Nginx ...
- cmd命令提示符大全(干货)
cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Se ...
- except but
He didn't speak anything but Greek... 他只会说希腊语.The crew of the ship gave them nothing but bread to ea ...
- Kafka生产者producer简要总结
Kafka producer在设计上要比consumer简单,不涉及复杂的组管理操作,每个producer都是独立进行工作的,与其他producer实例之间没有关联.Producer的主要功能就是向某 ...
- codeforces 803G Periodic RMQ Problem
codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...
- python时间模块和random模块
模块:用一坨代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能,可能需要多个函数才能 ...
- angularJs的作用域和依赖注入
一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找 &rootScope这是全局作用域 <!DOCTYPE HTML&g ...