常用操作
查看帮助
db.help()
当前数据库的版本
db.version()
当前使用的数据库
db.getName()
当前数据库的状态
db.stats()
当前数据库的地址
db.getMongo()
查询错误信息
db.getPrevError()
清除错误记录
db.resetError()
数据库服务器状态
db.serverStatus()
数据库database操作
创建数据库
use Person
切换数据库
use Person
删除数据库
db.dropDatabase()
查看所有数据库
show dbs
克隆指定地址的数据库
db.cloneDatabase(“127.0.0.1”)
复制指定数据库的数据到指定数据库
db.copyDatabase(“被复制的数据库”,”粘贴后数据库”,”粘贴后地址”)
修复数据库
db.repairDatabase()
注意:
* 当创作一个集合,即table时,会自动创建当前数据库
* 删除数据库时,必须先切换到对应的数据库,再执行删除。
- 集合collection操作
创建collection,即table
db.createCollection(表名,{size:50,capped:5,max:100})
删除table
db.col.drop()
得到所有table
db.getCollectionNames()
显示当前talbe状态
db.printCollectionStats()
显示所有collection
show collections
获取当前集合所在数据库
db.person.getDB()
复制集合
// col被复制到person
db.col.copyTo('person')
显示用户
show users
// 或
db.getUsers()
添加用户
db.addUser(“用户名称”)
// 或
db.addUser(“用户名称”,”用户密码”,true为只读)
删除用户
db.removeUser(“用户名”)
数据库认证,安全模式,即身份验证
// 登录
db.auth(“用户名称”,”密码”)
// 退出
db.logout()
登录数据库
mongo -u 用户名 -p 密码 —-authenticationDatabase 数据库
索引操作
创建索引
// 1为升序,-1为降序
db.col.ensureIndex({“key”:1,”key”:-1})
删除指定索引
db.col.dropIndex(“key”)
删除所有索引
db.col.dropIndexes()
获取当前所有索引
db.col.getIndexes()
获取当前所有index信息
db.col.reIndex()
查看索引大小
db.col.totalIndexSize()
数据操作
文档的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式。BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
操作格式:db.数据库名称.操作类型({‘key’:’value’})
插入数据
db.col.insert({key:’value’,key:’value’})
// 或
db.col.save({key:’value’,key:’value’})
// 或 先将Json定义成变量后再操作
object=({key:’value’,key:’value’})
db.col.save(object)
查看数据
db.col.find()
// 或 查询第一条数据
db.col.findOne()
// 或 查询前n条数据
db.col.find().limit(n)
// 或 查询n条以后的数据
db.col.find().skip(n)
// 或 查询某个结果的记录条数
db.col.find(‘key’).count()
// 或 过滤重复数据
db.col.distinct(‘key’)
// 或 查询指定数据
db.col.find({‘key’:’value’})
// 或 查询大于某个值n的记录
db.col.find({‘key’:{$gt:n}})
// 或 查询小于某个值n的记录
db.col.find({‘key’:{$lt:n}})
// 或 查询大于等于某个值n的记录
db.col.find({‘key’:{$gte:n}})
// 或 查询小于等于某个值n的记录
db.col.find({‘key’:{$lte:n}})
// 或 查询大于等于n1,且小于等于某个值n2的记录
db.col.find({‘key’:{$gte:n1,$lte:n2}})
// 或 查询等于n1,或等于n2的记录
db.col.find({$or:[{‘key’:n1},{’key’:n2}]})
// 或 查询包含某个值value的记录
db.col.find({‘key’:/value/})
// 或 查询以某个值value开头的记录
db.col.find({‘key’:/^value/})
// 或 查询大于某个值n的记录
db.col.find({‘key’:{$gt:n}})
// 或 查询某个条件下的指定列的记录
db.col.find({‘key’:’value’},{‘key’:1,’key’:1,…}})
// 或 查询按指定条件排序的记录。注意:1为升序,-1为降序
db.col.find().sort({‘key’:1})
注意:
1 查询条件等式小于 lt,小于等于 lte,大于 gt,大于等于 gte,不等于 ne2查询联合条件在某个范围内 in,不是 not,或是 or
3 匹配自身,或不存在的null,存在的$exists
删除数据
db.col.remove({‘key’:’value’})
修改数据
db.col.update({‘key’:’value’},{$set:{‘key’:’value’}},false,true)
// 或 某个条件下的值增加n
db.col.update({‘key’:’value’},{$inc:{‘key’:n}})
多种操作合并,如查询修改删除
db.col.findAndModify({query:{‘key’:’value’},sort:{‘key’:1},update:{$set:{‘key’:’value’}},remove:false})
// 或
db.runCommand({findandmodify:col,query:{‘key’:’value’},sort:{‘key’:-1},update:{$set:{‘key’:’value’}},remove:false})
其他操作
对象转换成json
tojson(new Object({‘key’:’value’}))
游标查询
转换成数组
var array = db.col.find()
显示记录
while (array.hasNext()){printjson(array.next());}
迭代循环
db.col.find().forEach(printjson)
数组处理
转换成数组
var array = db.col.find()
下标显示记录
array[1]
// 或
var array = db.col.find().toArray()
printjson(array[1])
数据库的锁状态
锁状态
db.currentOp()
加锁
db.runCommand({fsync:1,lock:1})
解锁
db.$cmd.sys.unlock.findOne()
注意
1 一般执行数据库备份时进行加锁
2 fsyncLock为1,表示不允许执行写操作
数据库的备份、恢复、数据迁移(导入、导出)
创建备份目录
mkdir backupDocument
进入bin目录
cd bin
备份
备份全部数据库
./mongodump
备份指定数据库
./mongodump -d 指定数据库
备份指定数据库中的指定集合
./mongodump -d 指定数据库 -c 指定集合
注意:备份时,需要进入备份数据库的目录
恢复
恢复全部数据库
// drop表示恢复前删除原来的数据库数据,避免造成恢复后数据重复
./mongorestore —-drop
恢复指定数据库
./mongorestore -d 指定数据库 —drop
恢复指定数据库的指定集合
./mongorestore -d 指定数据库 -c 指定集合 —drop
导入
// 将数据导入到指定数据库的指定集合
./mongoimport -d col -c col --file /Users/zhangshaoyu/Desktop/export/personInfo.json --type json
注意:
1 文件类型type:csv、tsv、json,默认格式json
2 mongoimport —help查看帮助
导出
// 将指定数据库中的指定集合中的数据导出到指定格式文件
./mongoexport -d col -c col -o /Users/zhangshaoyu/Desktop/export/personInfo.json --type json -f 'name,age,id'
注意:
1 -q表示指定查询条件
2 -f表示文件中的列名
3 mongoexport —help可查看帮助
远程管理
远程连接
mongo -u 用户名 -p 密码 地址/数据库
多表联合处理
示例:模拟用户发帖,关联用户集合userTable、帖子集合postTable的关系。
1 获取用户信息
people = db.person.findOne()
2 发表帧子
db.postCollection.save({'title':'test title 2','name':people.name})
3 获取帖子信息
db.postCollection.find({'name':people.name})