MongoDB基本操作命令

一、基础

1、增

# 创建库  ps:use的话需要插入数据才能显示的哟!
> use msg

# 查看当前使用的库
> db
# 创建集合
> use msg
> db.createCollection("user")
> show tables

# 插入数据
> db.user.insert({"name":"mongo"})

2、删

# 删除库
> use msg
> db.dropDatabase()

# 删除集合
> use msg
> db.user.drop()

# 删除整个集合中的所有数据
> db.test.remove()
# 删除集合中符合过滤条件的数据
> db.test.remove({name:/aws/})
# 删除符合条件的一条记录
> db.test.remove({name:/aws/},1)

3、查

# 查询数据库
> use msg
# 查看数据库数据详情
> db.stats()

# 查询集合
> show tables
# 重命名集合
> db.user.renameCollection("USER")
# 查看集合数据详情
> db.user.stats()
# 查看集合所有数据
> db.user.find()
# 格式化输出
> db.user.find().pretty()
# 查看一条数据
> db.user.findOne()
# 查看匹配数据
> db.user.find({"name":"mongo"})
# 查询大于某个数值数据
> db.user.find({salary:{$gt:7000}})
# 查看名称中包含‘a’的数据
> db.user.find({name:/a/})
# 查询name以W打头的数据
> db.user.find({name:/^W/})

# 多条件“与”
# 查询age小于30,salary大于6000的数据
> db.user.find({age:{$lt:30},salary:{$gt:6000}})

# 多条件“或”
# 查询age小于25,或者salary大于10000的记录
> db.user.find({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})

# 查询记录中的指定列
> db.user.find({},{name:1,age:1,salary:1,sex_orientation:true})

# 查询指定字段的数据,并去重
> db.user.distinct('gender')

# 指定结果集返回条目
> db.user.find().limit(2)

# 查询第一条以外的数据
> db.user.find().skip(1)

# 对结果集排序
# 升序
> db.user.find().sort({salary:1})
# 将序
> db.user.find().sort({salary:-1})

# 统计记录数量
> db.user.find().count()

4、改

# 修改数据
> db.user.update({"name":"mongo"},{$set:{"name":"mongos"}})
# 修改多条相同文档
> db.user.update({"name":"mongo"},{$set:{"name":"mongos"}},{multi:true})
# 只更新第一条记录:
> db.user.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
# 全部更新:
> db.user.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
# 只添加第一条:
> db.user.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
# 全部添加进去:
> db.user.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
# 全部更新:
> db.user.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
# 只更新第一条记录:
> db.user.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

# 更新符合过滤条件的信息
> db.user.update({name:'Gal Gadot'},{$set:{age:23}},false,true) 
# 添加新的字段
> db.user.update({name:'Mikie Hara'},{$set:{interest:"CBA"}},false,true)
# 使用函数 $inc
> db.user.update({gender:'female'},{$inc:{salary:50}},false,true)
# 原
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female","interest" : "CBA", "age" : 26, "salary" : 7000 }
# 现
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female","interest" : "CBA", "age" : 26, "salary" : 7050 }

二、集合操作

方法名 描述
db.collection.aggregate() 聚合,主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果
db.collection.bulkWrite() 批量写入
db.collection.createIndex() 创建一个集合索引
db.collection.count() 返回集合总数或匹配查询的结果集总数
db.collection.deleteOne() 删除集合中的一个文档
db.collection.deleteMany() 删除集合中的多个文档
db.collection.dataSize() 返回集合的大小
db.collection.distinct() 返回具有指定字段不同值的文档(去除指定字段的重复数据)
db.collection.dropIndex() 删除一个集合中的指定索引
db.collection.dropIndexes() 删除一个集合中的所有索引
db.collection.drop() 删除当前数据库中的collection集合
db.collection.explain() 返回各种方法的查询执行信息
db.collection.findOne() 查询单条数据
db.collection.findOneAndReplace() 查询单条数据并替换
db.collection.findOneAndDelete() 查询单条数据并删除
db.collection.findOneAndUpdate() 查询单条数据并更新
db.collection.find() 查询集合,无参数则查询所有,并返回一个游标对象
db.collection.findAndModify() 查询并修改
db.collection.getIndexes() 返回当前集合的所有索引数组
db.collection.group() 提供简单的数据聚合功能
db.collection.isCapped() 判断集合是否为定容量
db.collection.insert() 在当前集合插入一条或多条数据(或叫文档)
db.collection.insertMany() 在当前集合插入多条数据
db.collection.insertOne() 在当前集合插入一条数据
db.collection.reIndex() 重建当前集合的所有索引
db.collection.renameCollection() 重命名集合名称
db.collection.replaceOne() 替换集合中的一个文档(一条数据)
db.collection.remove() 从当前集合删除数据
db.collection.save() 已插入数据更新
db.collection.stats() 返回当前集合的状态
db.collection.storageSize() 返回当前集合已使用的空间大小
db.collection.totalSize() 返回当前集合的总占用空间,包括所有文件和所有索引
db.collection.totalIndexSize() 返回当前集合所有的索引所占用的空间大小
db.collection.updateMany() 修改集合中的多条数据
db.collection.update() 修改集合中的数据
db.collection.updateOne() 修改集合中的一条数据
db.collection.validate() 执行对集合验证操作

三、副本集操作

方法名 描述
rs.initiate()
rs.addArb() 添加仲裁
rs.help() 帮助
rs.printReplicationInfo() 查看到副本集操作日志
rs.remove() 减少副本集节点
rs.freeze() “冻结”mongodb实例
rs.status()/sh.status() 查看副本集状态
db.printSlaveReplicationInfo 查看复制集的同步状态
rs.add() 增加副本集节点
rs.stepDown() 将当前主库“降级”
rs.slaveOk()
rs.conf()
rs.syncFrom()
rs.reconfig()

四、用户管理

方法名 描述
db.getUsers() 获取所有用户
db.dropAllUsers() 删除所有用户
db.updateUser() 更新用户
db.createUser() 创建用户
db.revokeRolesFromUser() 取消授权
db.removeUser() 删除用户
db.grantRolesToUser() 授权
db.getUser() 获取用户
db.changeUserPassword() 更改用户密码
db.auth() 数据库认证、安全模式

五、索引

1、新增索引

# 单键索引
> db.集合.createIndex({"name":1})
# 倒序索引
> db.集合.createIndex({"name":-1})
# 唯一索引
> db.集合.createIndex({"name":1},{"unique":true})
# 后台建索引
> db.集合.createIndex({"name":1},{background:1})
# 复合索引
> db.集合.createIndex({"name":1,"age":1})

2、查看索引

# 查看数据库所有索引
> db.system.indexes.find()
# 查看集合索引
> db.集合.getIndexes()
> db.集合.getIndexKeys()
# 查看索引大小
> db.集合.totalIndexSize()

3、删除索引

# 删除单个索引
> db.集合.dropIndex("name_1")
# 删除所有索引
> db.集合.dropIndexes()

4、重建索引

> db.集合.reIndex({"name":1})

六、副本集

1、基础操作

# 查看集群状态
> rs.status()
# 查看配置
> rs.config()
# 允许在从节点查询操作
> rs.slaveOK()
# 查询是否主节点
> rs.isMaster()

2、成员管理

# 添加成员
> rs.add("ip:port")
# 添加仲裁节点
> rs.addArb("ip:port")
# 删除成员
> rs.remove("ip:port")
# 重置配置
> rs.reconfig()

3、主从管理

# 降级
> rs.stepDown(time)
# 阻止选举
> rs.freeze(time)
# 主从延迟状态
# 主
> db.printReplicationInfo()
# 从
> db.printSlaveReplicationInfo()

七、分片

1、基础操作

# 查看集群状态
mongos> sh.status()
# 列出所有分片
mongos> db.runCommand({ listshards : 1 })
# 添加分片
mongos> sh.addShard("shard1/192.168.200.11:40000")
# 移除分片
mongos> db.runCommand({"removeShard":"shard1"})
# 如果是主分片,需要先把对应数据库移动到其他分片,再删除,执行多遍查看是否迁移完成。
mongos> db.runCommand( { movePrimary: "msg", to: "shard2" })
# 移除完需要刷新缓存
mongos> db.adminCommand({"flushRouterConfig":1})

2、平衡器

# 平衡器
# 开启平衡器
mongos> sh.startBalancer()
# 停止平衡器
mongos> sh.stopBalancer()             # 停止平衡器
or
mongos> sh.setBalancerState(false)
# 获取平衡器状态
mongos> sh.getBalancerState()
# 验证禁用后有没有正在迁移的块
mongos> sh.isBalancerRunning()

3、开启分片

mongos> use admin
# 开启库分片
mongos> sh.enableSharding("dba")                
或
mongos> db.runCommand({enablesharding:"dba"})
# 开启集合分片
mongos> sh.shardCollection("库.集合",{"name":1})
或
mongos> db.runCommand({shardcollection:"库.集合",key:{"name":1}})
mongos> sh.status()
# 查看集合分布情况
mongos> db.集合.stats()

4、数据块

# 查看块大小
mongos> use config
mongos> db.settings.find()
# 修改块大小
mongos> db.settings.save({"_id":"chunksize","value":32})

手动迁移块

# 需要先关闭平衡器哟
mongos> use config
查询块
mongos> db.chunks.find().pretty()
#手动拆分
mongos> sh.splitAt("库.集合",{"groupId":"500000001","_id":"6569514481477484544"})
#手动迁移分片
mongos> sh.moveChunk("库.集合",{"name" : "wPeFnJEvendSTbH"},"其他分片")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容