MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。java
在高负载的状况下,添加更多的节点,能够保证服务器性能。mongodb
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。数据库
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。编程
1.下载数组
根据本身Linux的版本下载对应的mongodb,下载地址:www.mongodb.com/download-ce…,下载到 /usr/java 路径下。安全
2.建立数据库文件路径和数据库日志路径bash
进入到java路径下,cd /usr/java/
服务器
建立mongodbNode文件夹,mkdir mongodbNode
网络
在mongodbNode下,建立data和log文件夹,其中data是存mongodb数据的文件夹,log是存mongodb日志的文件夹数据结构
mkdir data log
mkdir db
3.启动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
当看到如下信息的时候,则说明启动成功:
固然,咱们也能够经过查看后台进程的方式 检查mongodb是否启动成功:netstat -anp|grep mongod
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
f. 启动:mongod --config mongodb.conf
4.启动mongodb客户端
# 日志文件位置
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
复制代码
一个mongodb中能够创建多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例能够容纳多个独立的数据库,每个都有本身的集合和权限,不一样的数据库也放置在不一样的文件中。
"show dbs" 命令能够显示全部数据的列表。
运行"use"命令,能够链接到一个指定的数据库。
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不须要设置相同的字段,而且相同的字段不须要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 很是突出的特色。
须要注意的是:
一、文档中的键/值对是有序的。
二、文档中的值不只能够是在双引号里面的字符串,还能够是其余几种数据类型(甚至能够是整个嵌入的文档)。
三、MongoDB区分类型和大小写。
四、MongoDB的文档不能有重复的键。
五、文档的键是字符串。除了少数例外状况,键可使用任意UTF-8字符。
集合就是 MongoDB 文档组,相似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合能够插入不一样格式和类型的数据,但一般状况下咱们插入集合的数据都会有必定的关联性。
1.链接到客户端
2.查看数据库:show dbs
3.新建数据库:use testXbq,此时,show dbs不会有刚刚新建的数据库,当向数据库中 新建链接时 或者 直接插入文档 时,才会出现 testXbq数据库。
查看当前使用的数据库: db.getName() 或者 db
显示当前数据库的信息:db.stats()
修复当前使用的数据库:db.repairDatabase()
删除当前使用的数据库:db.dropDatabase()
从指定的机器上复制指定数据库数据到某个数据库:db.copyDatabase("mydb", "temp", "127.0.0.1"); --将本机的mydb的数据复制到temp数据库中
查看当前db的连接机器地址:db.getMongo()
当前db版本:db.version()
查看当前数据库中的全部链接:show collections
4.插入文档,向刚刚建立的链接中 插入文档:db.xbqTable.insert({name:"xbq",sex:"男"}),也可使用 save方法
5.**查询总的的文档:**db.xbqTable.find() ,若想要 格式化查询结果,在find()后面加上 .pretty() 便可,如:db.xbqTable.find().pretty()
6.更新文档,修改刚刚插入的文档:db.xbqTable.update({ "_id" : ObjectId("58e40c02aee532ffbea0b89d")},{$set:{name:"徐邦启"}})
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,若是这个参数为true,就把按条件查出来多条记录所有更新。
从新插入几条文档:
更新name为xbq的文档,并将age更新为 24,db.xbqTable.update({name:"xbq"},{$set:{age:24}},{multi:true})
7.删除文档,删除name为 徐邦启的文档:db.xbqTable.remove({name:"徐邦启"})
8.and查询,查询 name 为xbq,而且 address 为 广东深圳 的 文档:db.xbqTable.find({name:"xbq",address:"广东深圳"})
9.or查询,查询 name 为joe 或者 name为 java的文档:db.xbqTable.find({$or:[{name:"joe"},{name:"java"}]})
10.<,<=,> ,>= ,<>
总文档有:
11.**模糊查询,查询 name 中包含 o 的文档:**db.xbqTable.find({name:/o/});
至关于 select * from xbqTable where name like '%o%';
12.**模糊查询,查询name中以 t 开头的文档:**db.xbqTable.find({name:/^t/})
至关于 select * from xbqTable where name like 't%';
13.**查询指定列 name 和 sex 的数据:**db.xbqTable.find({},{name:1,sex:1}) 或者 db.xbqTable.find({},{name:true,sex:true})
至关于 select name,sex from xbqTable;
写 0 或者 false ,则为 排除此列,查询 除了此列的 其余数据
14.**查询指定列 name 和 sex的数据,而且 age > 16 的文档:**db.xbqTable.find({age:{$gt:16}},{name:1,sex:1})
15.查询去重:db.xbqTable.distinct("sex")
至关于:select distinct(sex) from xbqTable;
16.按照age 排序:
升序:db.xbqTable.find().sort({age:1})
降序:db.xbqTable.find().sort({age:-1})
17.查询前2条的文档:db.xbqTable.find().limit(2)
18.查询3条后的文档(跳过前3条的文档):db.xbqTable.find().skip(3)
19.查询在2--4之间的文档(即先跳过前2条,而后再查询2条)(用于分页查询,limit是pageSize,skip是 第几页 * pageSize):
db.xbqTable.find().skip(2).limit(2)
20.**查询第1条的文档:**db.xbqTable.findOne() 或者 db.xbqTable.find().limit(1)
21.查询 name 为 xbq的文档数目:db.xbqTable.find({name:"xbq"}).count();
22.分组
索引一般可以极大的提升查询的效率,若是没有索引,MongoDB在读取数据时必须扫描集合中的每一个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是很是低的,特别在处理大量的数据时,查询能够要花费几十秒甚至几分钟,这对网站的性能是很是致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
建索引过程会阻塞其它数据库操做,background可指定之后台方式建立索引,即增长 "background" 可选参数。 "background" 默认值为false。
例如:db.xbqTable.ensureIndex({name:1},{background:true}),意思是 在name字段上创建一个升序的索引。