mongodb基本操作指令

基本操作:

帮助

help
KEYWORDS.help
KEYWORDS.[TAB]

不同级别和命令

db 数据库管理操作有关         db.help()  
sh 和shard分片有关的命令      sh.help()  
rs  复制集管理有关的命令      rs.help()  

常用操作查看当前db版本

test> db.version()
3.2.6

显示当前数据库

test>db
test
或
>db.getName()
test

查询所有数据库

test> show dbs  (==show databases)  
local  0.000GB  

切换数据库

> use local
switched to db local  

显示当前数据库状态,查看local数据

test> use local  
switched to db local  
local> db.stats()

查看当前数据库的连接机器地址

> db.getMongo()
connection to 127.0.0.1

指定数据库进行连接:(默认连接本机test数据库)

# mongo 192.168.1.24/admin
[mongod@mongodb ~]$ mongo 192.168.1.24/admin
MongoDB shell version: 3.2.6
connecting to: 192.168.1.24/admin
admin> 

创建数据库:当use的时候,系统就会自动创建一个数据库。如果use之后没有创建任何集合。系统就会删除这个数据库。
--删除数据库:(如果没有选择任何数据库,会删除默认的test数据库)

删除test数据库

test> show dbs
local  0.000GB
test   0.000GB
test> use test
switched to db test
test> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }

集合操作(表操作)

  • 创建集合

    • 方法1:手动创建

        admin>use app
        switched to db app
        app>db.createCollection('a')
        { "ok" : 1 }  
        app>db.createCollection('b')
        { "ok" : 1 }  
        >show collections  
        //查看当前数据下的所有集(==show tables)  
        a  
        b  
        或
        db.getCollectionNames()
        [ "a", "b" ]
      
    • 方法2:当插入一个文档的时候,一个集合就会自动创建。

        admin> use app  
        switched to db app  
        app>db.c.insert({username:"mongodb"})  
        WriteResult({ "nInserted" : 1 })  
        app> show collections  
        a  
        b  
        c  
        app> db.c.find()  
        { "_id" : ObjectId("5743c9a9bf72d9f7b524713d"), "username" : "mongodb" }  
        **或者使用db.c.find().pretty()来优化显示效果**
      
  • 删除集合

      app> use app
      switched to db app
      app> db.log.drop()  
      //删除集合
    
  • 重命名集合

把log改名为log1

    app> db.log.renameCollection("log1")  
    { "ok" : 1 }  
    app> show collections   
    a
    b  
    c  
    log1  
  • for循环插入数据

      app> for(i=0;i<100;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
    
  • 查询集合中的记录数

      app> db.log.find()
      //查询所有记录
    

    注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
    设置每页显示数据的大小:
    DBQuery.shellBatchSize=50; //每页显示50条记录

      app> db.log.find({uid:'50'})   
      //查询uid位50的记录,相当于mysql的where条件
      app> db.log.findOne()   
      //查看第1条记录
      app> db.log.count()  
      //查询总的记录数
    
  • 删除集合中的记录数

      app> db.log.remove({})  
      //删除集合中所有记录
      db.log.distinct("name")  
      //查询去掉当前集合中某列的重复数据:
      [ "mm" ]
    
  • 查看集合存储信息

      app>db.log.stats()
      app> db.log.dataSize()  
      //集合中数据的原始大小  
      app> db.log.totalIndexSize()  
      //集合中索引数据的原始大小
      app>db.log.totalSize()  
      //集合中索引+数据压缩存储之后的大小
      app> db.log.storageSize()  
      //集合中数据压缩存储的大小
    

SQL语言与CRUD语言对照

SQL Schema Statements MongoDB Schema Statements
CREATE TABLE users (id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30),age Number,status char(1),PRIMARY KEY (id)) Implicitly created on firstinsert()operation. The primary key_idisautomatically added if_idfield is not specified.db.users.insert( {user_id: "abc123",age: 55,status: "A"} ) However, you can also explicitly create a collection: db.createCollection("users")
ALTER TABLE users ADD join_dateDATETIME 在Collection 级没有数据结构概念。然而在document级,可以通过set在update操作添加列到文档中。 db.users.update({ },{set: { join_date: new Date() } },{ multi: true })
ALTER TABLE usersDROP COLUMN join_date 在Collection 级没有数据结构概念。然而在document级,可以通过unset在update操作从文档中删除列。db.users.update({ },{unset: { join_date: "" } },{ multi: true })
CREATE INDEX idx_user_id_asc ON users(user_id) db.users.createIndex( { user_id: 1 } )
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC) db.users.createIndex( { user_id: 1, age: -1 } )
DROP TABLE users db.users.drop()
插入语句
SQL INSERT Statements MongoDB insert() Statements
INSERT INTO users(user_id,age,status)VALUES ("bcd001",45,"A") db.users.insert({ user_id: "bcd001", age: 45, status:"A" })
查询类语句
SQL SELECT Statements MongoDB find() Statements
SELECT * FROM users db.users.find()
SELECT id,user_id,status FROM users db.users.find({ },{ user_id: 1, status: 1, _id: 0 })
SELECT user_id, status FROM users db.users.find({ },{ user_id: 1, status: 1 })
SELECT * FROM usersWHERE status = "A" db.users.find({ status: "A" })
SELECT user_id, status FROM users WHERE status = "A" db.users.find({ status: "A" },{ user_id: 1, status: 1, _id: 0 })
数据更新操作
SQL Update Statements MongoDB update() Statements
UPDATE users SET status = "C" WHERE age > 25 db.users.update({ age: { gt: 25 } },{set: { status: "C" } },{ multi: true })
UPDATE users SET age = age + 3 WHERE status = "A" db.users.update({ status: "A" } ,{ $inc: { age: 3 } },{ multi: true })
数据库删除操作
DELETE FROM usersWHERE status = "D" db.users.remove( { status: "D" } )
DELETE FROM users db.users.remove({})

用户权限管理

创建管理员用户

  • (1)创建用户

      use admin
      db.createUser(
      {
          user: "root",
          pwd: "root",
          roles: [ { role: "root", db: "admin" } ]
      }
      )
    

    注意:
    1、创建管理员角色用户的时候,必须要到admin下创建
    2、删除的也要到相应的库下操作

      use  admin  
      db.dropuser('root');
    
  • (2)验证

      db.auth("root","root")
    
  • (3)配置文件开启auth验证

      cat >>mongodb.conf<<EOF
      security:
      authorization: enabled 
      EOF
    
  • (4)重启mongodb
    测试用户可用性:

      [mongod@db01 ~]$ mongo -uroot -proot admin    
    

    注意:用户在哪个数据库下创建的,最后加上什么库,数据库内验证:

      [mongod@db01 ~]$ mongo 
      > use admin
      > db.auth("root","root")
    

2、按生产需求创建应用用户

  • 例1.创建对某库的只读用户--test

    • 创建对某库的只读用户

        use test
        db.createUser(
        {
          user: "test",
          pwd: "test",
          roles: [ { role: "read",   db: "test" } ]
        }
        )
        db.auth("test","test")
        show  users;
      
    • 登录test用户,并测试

        db.createCollection('b')
      
  • 例2.创建某库的读写用户

      db.createUser(
        {
          user: "test1",
          pwd: "test1",
          roles: [ { role: "readWrite", db:         "test" } ]
        }
      )
      show users;
      db.auth("test1","test1")
    
  • 例3.创建 分别对多库的不同权限的用户

      use app
      db.createUser(
      {
      user: "app03",
      pwd: "app03",
      roles: [ { role: "readWrite", db:             "app", } ]
      }
      )
    
  • 例4.删除用户

删除app01用户:先登录到admin数据库

mongo -uroot –proot 192.168.1.24/admin  
use app  
db.dropUser("app01")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,898评论 2 89
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,171评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 七月一号下午坐的五点多的火车,由济南出发,开往张家界,停站在月山下车。对面坐的是一个拉拉。很瘦,穿着黑色短袖,灰色...
    达浪打啦阅读 207评论 0 0
  • 今天上午外面真冷啊,妈妈带着我和弟弟在小区玩得开心,妈妈说要去给弟弟买药。弟弟有点感冒了。中午吃的麻辣烫,我感觉麻...
    魏雅轩阅读 51评论 0 0