mongoDB层次关系: 数据库>集合>文档sql
环境: Ubuntu14.04 MongoDB存储路径为/opt/mongodb 下文用MPATH代替mongodb
1 安装和启动数据库
1.1 下载MongoDB3.2.9最新版本vim
1.2 tar xf MONGODB.tar.gz数组
1.3 添加到环境变量 /etc/profilenosql
1.4 mongod -dbpath MPATH/data/dbcode
1.5 mongo 启动mongoDB SHELL对象
2 配置管理员和用户ip
2.1 查看当前数据库[仅一个local] 切换到admin数据库[准备建立用户管理员]rem
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()