MongoDB(一)-- 简介、安装、CRUD

1、Mongodb简介

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

在高负载的状况下,添加更多的节点,能够保证服务器性能。mongodb

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

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。编程

2、主要特色

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

img

3、安装

1.下载数组

根据本身Linux的版本下载对应的mongodb,下载地址:www.mongodb.com/download-ce…,下载到 /usr/java 路径下。安全

2.建立数据库文件路径和数据库日志路径bash

  1. 进入到java路径下,cd /usr/java/服务器

  2. 建立mongodbNode文件夹,mkdir mongodbNode网络

  3. 在mongodbNode下,建立data和log文件夹,其中data是存mongodb数据的文件夹,log是存mongodb日志的文件夹数据结构

mkdir data log

  1. 进入data文件,在data下建立db文件夹,mongodb会将数据文件写到db文件夹下,

mkdir db

3.启动mongodb服务端,有两种方式

  1. 命令行方式启动(启动方便),进入到bin目录下(能够经过 ./mongod --help 来查看 mongodb 服务端启动的参数):

./mongod --dbpath /usr/java/mongoNode/data/db --logpath /usr/java/mongoNode/log/mongodb.log --fork --bind_ip 192.168.242.129 --port 27017 --journal

当看到如下信息的时候,则说明启动成功:

img

固然,咱们也能够经过查看后台进程的方式 检查mongodb是否启动成功:netstat -anp|grep mongod

img

  1. 配置文件方式启动(管理起来规范)

a. 在cd /usr/java/mongoNode 下新建一个文件:touch mongodb.conf

b. 编辑文件,vi mongodb.conf

c. 在mongodb.conf中添加以下内容:

dbpath=/usr/java/mongoNode/data/db
logpath=/usr/java/mongoNode/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.242.129
port=27017
复制代码

d. 将mongodb设置成环境变量:export PATH=/usr/java/mongodb/bin:$PATH

e. 查看环境变量是否生效:echo $PATH

img

f. 启动:mongod --config mongodb.conf

4.启动mongodb客户端

  • 命令行方式:./mongo --host 192.168.242.129 --port 27017
  • 配置文件方式:mongo --host 192.168.242.129 --port 27017

4、配置文件

# 日志文件位置
logpath=/var/log/mongo/mongod.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
# 默认27017
#port = 27017
# 数据库文件位置
dbpath=/var/lib/mongo
# 启用按期记录CPU利用率和 I/O 等待
#cpu = true
# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true
# 详细记录输出
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)用于开发驱动程序时验证客户端请求
#objcheck = true
# Enable db quota management
# 启用数据库配额管理
#quota = true
# 设置oplog记录等级
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog=0
# Diagnostic/debugging option 动态调试项
#nocursors = true
# Ignore query hints 忽略查询提示
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true
# 关闭服务器端脚本,这将极大的限制功能
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# 关闭数据文件预分配
# Disable data file preallocation.
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# Specify .ns file size for new databases.
# nssize = 
# Replication Options 复制选项
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile
复制代码

5、数据库

一个mongodb中能够创建多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例能够容纳多个独立的数据库,每个都有本身的集合和权限,不一样的数据库也放置在不一样的文件中。

"show dbs" 命令能够显示全部数据的列表。

运行"use"命令,能够链接到一个指定的数据库。

6、文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不须要设置相同的字段,而且相同的字段不须要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 很是突出的特色。

须要注意的是:

一、文档中的键/值对是有序的。

二、文档中的值不只能够是在双引号里面的字符串,还能够是其余几种数据类型(甚至能够是整个嵌入的文档)。

三、MongoDB区分类型和大小写。

四、MongoDB的文档不能有重复的键。

五、文档的键是字符串。除了少数例外状况,键可使用任意UTF-8字符。

7、集合

集合就是 MongoDB 文档组,相似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合能够插入不一样格式和类型的数据,但一般状况下咱们插入集合的数据都会有必定的关联性。

8、操做(CURD)

1.链接到客户端

2.查看数据库:show dbs

img

3.新建数据库:use testXbq,此时,show dbs不会有刚刚新建的数据库,当向数据库中 新建链接时 或者 直接插入文档 时,才会出现 testXbq数据库。

img

  1. 查看当前使用的数据库: db.getName() 或者 db

  2. 显示当前数据库的信息:db.stats()

  3. 修复当前使用的数据库:db.repairDatabase()

  4. 删除当前使用的数据库:db.dropDatabase()

  5. 从指定的机器上复制指定数据库数据到某个数据库:db.copyDatabase("mydb", "temp", "127.0.0.1"); --将本机的mydb的数据复制到temp数据库中

  6. 查看当前db的连接机器地址:db.getMongo()

  7. 当前db版本:db.version()

  8. 查看当前数据库中的全部链接:show collections

4.插入文档,向刚刚建立的链接中 插入文档:db.xbqTable.insert({name:"xbq",sex:"男"}),也可使用 save方法

img

5.**查询总的的文档:**db.xbqTable.find() ,若想要 格式化查询结果,在find()后面加上 .pretty() 便可,如:db.xbqTable.find().pretty()

img

6.更新文档,修改刚刚插入的文档:db.xbqTable.update({ "_id" : ObjectId("58e40c02aee532ffbea0b89d")},{$set:{name:"徐邦启"}})

img

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,若是这个参数为true,就把按条件查出来多条记录所有更新。

从新插入几条文档:

img

更新name为xbq的文档,并将age更新为 24,db.xbqTable.update({name:"xbq"},{$set:{age:24}},{multi:true})

img

7.删除文档,删除name为 徐邦启的文档:db.xbqTable.remove({name:"徐邦启"})

img

8.and查询,查询 name 为xbq,而且 address 为 广东深圳 的 文档:db.xbqTable.find({name:"xbq",address:"广东深圳"})

img

9.or查询,查询 name 为joe 或者 name为 java的文档:db.xbqTable.find({$or:[{name:"joe"},{name:"java"}]})

img

10.<,<=,> ,>= ,<>

总文档有:

img

  1. 查询age < 15的文档:db.xbqTable.find({age:{$lt:15}})

img

  1. **查询age <= 15的文档:**db.xbqTable.find({age:{$lte:15}})

img

  1. **查询age>15的文档:**db.xbqTable.find({age:{$gt:15}})

img

  1. **查询年age>=15的文档:**db.xbqTable.find({age:{$gte:15}})

img

  1. **查询age != 15的文档:**db.xbqTable.find({age:{$ne:15}})

img

11.**模糊查询,查询 name 中包含 o 的文档:**db.xbqTable.find({name:/o/});

至关于 select * from xbqTable where name like '%o%';

img

12.**模糊查询,查询name中以 t 开头的文档:**db.xbqTable.find({name:/^t/})

至关于 select * from xbqTable where name like 't%';

img

13.**查询指定列 name 和 sex 的数据:**db.xbqTable.find({},{name:1,sex:1}) 或者 db.xbqTable.find({},{name:true,sex:true})

至关于 select name,sex from xbqTable;

写 0 或者 false ,则为 排除此列,查询 除了此列的 其余数据

img

14.**查询指定列 name 和 sex的数据,而且 age > 16 的文档:**db.xbqTable.find({age:{$gt:16}},{name:1,sex:1})

img

15.查询去重:db.xbqTable.distinct("sex")

至关于:select distinct(sex) from xbqTable;

img

16.按照age 排序

升序:db.xbqTable.find().sort({age:1})

    

img

降序:db.xbqTable.find().sort({age:-1})

img

17.查询前2条的文档:db.xbqTable.find().limit(2) 

img

18.查询3条后的文档(跳过前3条的文档):db.xbqTable.find().skip(3)

img

19.查询在2--4之间的文档(即先跳过前2条,而后再查询2条)(用于分页查询,limit是pageSize,skip是 第几页 * pageSize):

db.xbqTable.find().skip(2).limit(2)

img

20.**查询第1条的文档:**db.xbqTable.findOne() 或者 db.xbqTable.find().limit(1)

img

21.查询 name 为 xbq的文档数目:db.xbqTable.find({name:"xbq"}).count();

img

22.分组

9、索引

索引一般可以极大的提升查询的效率,若是没有索引,MongoDB在读取数据时必须扫描集合中的每一个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是很是低的,特别在处理大量的数据时,查询能够要花费几十秒甚至几分钟,这对网站的性能是很是致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

建索引过程会阻塞其它数据库操做,background可指定之后台方式建立索引,即增长 "background" 可选参数。 "background" 默认值为false。

例如:db.xbqTable.ensureIndex({name:1},{background:true}),意思是 在name字段上创建一个升序的索引。


欢迎关注个人公众号,第一时间接收最新文章~ 搜索公众号: 码咖 或者 扫描下方二维码:

img
相关文章
相关标签/搜索