Mongodb安装
官网地址:https://www.mongodb.com/download-center#community
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
设置环境变量
export PATH=/usr/data/mongodb/mongodb/bin:$PATH
echo $PATH
命令启动:mongod --dbpath /usr/data/mongodb/mongodb/data/db --logpath /usr/data/mongodb/mongodb/log/mongodb.log --fork --bind_ip 192.168.1.1 --port 27017
配置文件启动:mongod --config mongodb.conf
dbpath=/usr/data/mongodb/master/slave/data/db
logpath=/usr/data/mongodb/master/slave/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.1.1
port=27017
客户端连接 mongo --host 192.168.1.1 -port 27017
Mongodb配置文件
# 日志文件位置
logpath=/usr/data/mongodb/mongodb/log/mongod.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
# 默认27017
#port = 27017
# 数据库文件位置
dbpath=/usr/data/mongodb/mongodb/data/db
# 启用定期记录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 非常突出的特点。
一个简单的文档例子如下:
{“name”:”jack”,”sex”:”man”}
需要注意的是:
1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
比如,我们可以将以下不同数据结构的文档插入到集合中:
MongoDB 创建数据库
use dbname
local数据库,从名字可以看出,它只会在本地存储数据,即local数据库里的内容不会同步到副本集里其他节点上去;目前local数据库主要存储副本集的配置信息、oplog信息,这些信息是每个Mongod进程独有的,不需要同步到副本集种其他节点。
当Mongod启用auth选项时,用户需要创建数据库帐号,访问时根据帐号信息来鉴权,而数据库帐号信息就存储在admin数据库下。
创建连接
db.createCollection("my");
插入文档
MongoDB 使用 insert() 或 save() 方法向集合中插入文档
db.con.insert({name:”name”});
更新文档
db.con.update({"_id" : ObjectId("57edcd015343349065b52043")},{$set:{"name":"jack"}})
update table set name=’jack-update’ where id=57edcd015343349065b52043;
db.con.update({"_id" : ObjectId("57edcd015343349065b52043")},{$set:{"name":"jack"}},{multi:”true”})
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
MongoDB 删除文档
MongoDB remove()函数是用来移除集合中的数据。
db.dntest.remove({"_id" : ObjectId("57ecd3264099470558fa449d")})
MongoDB 查询文档
And
db.dntest.find({"age":18,"name":"jack"}).pretty()
or
db.dntest.find({$or:[{"name":"jack"},{"_id" : ObjectId("57edcd0c5343349065b52044")}]})
< <= > >= <>
db.dntest.find({"age":{$lt:18}})
db.dntest.find({"age":{$lte:18}})
db.dntest.find({"age":{$gt:18}})
db.dntest.find({"age":{$gte:18}})
db.dntest.find({"age":{$ne:18}})
and 和 or
db.dntest.find({"name":"jack",$or:[{"age":{$lt:18}},{"_id" : ObjectId("57edcd0c5343349065b52044")}]})
分页:
db.connection1.find().limit(2).skip(2)
MongoDB函数
db.dntest.aggregate([{$group:{"_id":"$name","avg":{$avg:"$age"}}}])
db.dntest.aggregate([{$group:{"_id":"$name","sum":{$sum:1}}}])
db.dntest.aggregate([{$group:{"_id":"$name","max":{$max:"$age"}}}])
db.dntest.aggregate([{$group:{"_id":"$name","min":{$min:"$age"}}}])
MongoDB排序
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.connection1.find().sort({age:-1})
MongoDB 索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
db.connection1.ensureIndex({name:1},{background:true})