mongoDB层次关系: 数据库>集合>文档
环境: Ubuntu14.04 MongoDB存储路径为/opt/mongodb 下文用MPATH代替
1 安装和启动
1.1 下载MongoDB3.2.9最新版本
1.2 tar xf MONGODB.tar.gz
1.3 添加到环境变量 /etc/profile
1.4 mongod -dbpath MPATH/data/db
1.5 mongo 启动mongoDB SHELL
2 配置管理员和用户
2.1 查看当前数据库[仅一个local] 切换到admin数据库[准备创建用户管理员]
show dbs
use admin
2.2 创建用户管理员[管理用户的帐号]
db.createUser({user:"master",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
# 成功创建后有以下提示
Successfully added user: {
"user" : "master",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
2.3 配置mongoDB认证和外链[默认只有localhost能连接]
设置ip [先关闭mongod服务]
sudo vim /etc/mongod.conf
新建配置文件并修改输入以下内容[允许外链]
bind_ip = 0.0.0.0
2.4 开启认证模式
mongod -f /etc/mongod.conf --auth --dbpath MPATH/data/db
auth: 认证模式
f: 配置文件 同--config
2.5 认证登陆mongoDB
mongo
use dbs
ERROR # 没有权限
use admin
db.auth("master", "123456")
1 # 表示成功
2.6 创建其他用户
db.createUser({user:"hakase",pwd:"123456",roles:[{role:"readWrite",db:"nosql"}]})
2.7 用其他用户登陆
use admin
db.auth("hakase","123456")
3 使用数据库
3.1 创建数据库/集合
使用两个终端 其实是三个 还有一个mongod ...
一个登陆hakase来使用nosql数据库
一个登陆master来查看数据库情况
hakase:
use nosql
db.createCollection("test")
show collections
master:
show dbs
3.2 删除数据库
因为感觉太麻烦 重新建立了一个超级超级用户...
db.createUser(
{user:"god",
pwd:"123456",
roles:["readWriteAnyDatabase","dbAdminAnyDatabase","clusterAdmin", "userAdminAnyDatabase"]}
)
然后删除数据库nosql
use nosql
db.dropDatabase()
{ "dropped" : "nosql", "ok" : 1 } # 删除成功 用 show dbs 命令看到nosql数据库已不存在
3.3 复制数据库
因为数据库上一步删掉了 所以还得重新建... 这次用了god帐号登陆
use nosql
db.createCollection("test")
db.createCollection("test2")
show dbs
show collections
接下来复制nosql数据库为copy_nosql
db.copyDatabase("nosql", "copy_nosql")
show dbs
3.4 管理集合 依然在nosql中
创建集合
db.createCollection("test3")
删除集合
coll = db.getCollection("test3")
coll.drop()
show collections
在集合中插入文档
coll = db.getCollection("test")
coll.insert({name:"ming", age:20})
coll.insert({name:"hong", age:18})
coll.find()
在集合中查找文档
coll.find()
coll.find({name:"hong"})
在集合中删除文档
coll.remove({age:20})
coll.find()
在集合中更新/修改文档
唯一一个比较复杂的
db.update(query, update, opts)
query 指定匹配查询文档
update 设置更新运算符
$inc递增
$set设置字段的值
$push 条目推送到数组
opts 有两个属性
upsert 若没有找到则插入 理解: if (!find()) insert else update
multi 查询匹配的所有文档都更新 否则只更新第一个找到的文档
coll.update(
{name:"hong"},
{$set:{age:22}},
{upsert:false, multi:true}
)
coll.find()
db.save(obj) 保存对象的更改 和update区别不大
但是要求要找_id 否则你怎么确定保存哪个对象呢?
coll.save(
{_id:ObjectId("57de3078bf66f6a50d3ff11d"),
name:"gang",
age:19}
)
coll.find()