zoukankan      html  css  js  c++  java
  • mongodb常用操作

    1. 基础概念

    mongodb中是通过数据库、集合、文档的方式来管理数据,下边是mongodb与关系数据库的一些概念对比:

    SQL 术语/概念 MongoDB术语/概念 解释/说明
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins 表连接(MongoDB不支持)
    primary key primary key 主键,MongoDB自动在每个集合中添加_id的主键
    1. 一个mongodb实例可以创建多个数据库

    2. 一个数据库可以创建多个集合

    3. 一个集合可以包括多个文档。

    2. 连接mongodb

    mongodb的使用方式是客户服务器模式,即使用一个客户端连接mongodb数据库(服务端)。

    2.1 命令格式

    mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
    

    字段说明

    key value
    mongodb // 固定前缀
    username 账号,可不填
    password 密码,可不填
    host 主机名或ip地址,只有host主机名为必填项。
    port 端口,可不填,默认27017
    /database 连接某一个数据库
    ?options 连接参数,key/value对
    # 例子
    mongodb://localhost # 连接本地数据库27017端口 
    mongodb://root:itcast@localhost # 使用用户名root密码为itcast连接本地数据库27017端口 
    mongodb://localhost,localhost:27018,localhost:27019 # 连接三台主从服务器,端口为27017、27018、27019
    

    2. 2 使用mongodb自带的javascript shell(mongo.exe)连接

    windows 版本的mongodb安装成功,在安装目录下的bin目录有mongo.exe客户端程序

    cmd状态执行mongo.exe

    此时就可以输入命令来操作mongodb数据库了

    3. 数据库操作

    3.1 查询数据库

    show dbs
    

    3.2 创建数据库

    # use 数据库名
    use DATABASE_NAME
    

    例子

    use test02
    

    有test02数据库则切换到此数据库,没有则创建。

    新创建的数据库不显示,需要至少包括一个集合。

    3.3 删除数据库

    db.dropDatabase()
    

    例子

    删除test02数据库

    1. 先切换数据库:use test02
    2. 再执行删除:db.dropDatabase()

    4 集合操作

    集合相当于关系数据库中的表,一个数据库可以创建多个集合,一个集合是将相同类型的文档管理起来。

    4.1 创建集合

    db.createCollection(name, options)
    name: 新创建的集合名称
    options: 创建参数
    

    4.2 删除集合

    db.collection.drop()
    

    例子

    db.student.drop()  # 删除student集合
    

    5. 文档操作

    5.1 插入文档

    mongodb中文档的格式是json格式,下边就是一个文档,包括两个key:_id主键和name

    {
        "_id" : ObjectId("5b2cc4bfa6a44812707739b5"),
        "name" : "john"
    }
    

    插入命令:

    db.COLLECTION_NAME.insert(document)
    

    每个文档默认以_id作为主键,主键默认类型为ObjectId(对象类型),mongodb会自动生成主键值。
    例子

    db.user.insert({"name":"john","age":12})
    

    注意:同一个集合中的文档的key可以不相同!但是建议设置为相同的。

    5.2 更新文档

    命令格式:

    db.collection.update(
       <query>,
       <update>,
       <options>
    )
    query:查询条件,相当于sql语句的where
    update:更新文档内容
    options:选项
    
    5.2.1 替换文档

    将符合条件 "name":"john"的第一个文档替换为{"name":"john","age":10}

    db.user.update({"name":"john"},{"name":"john","age":10})
    

    5.2.2 $set修改器

    使用$set修改器指定要更新的key,key不存在则创建,存在则更新。
    将符合条件 "name":"john"的所有文档更新nameage的值。

    db.user.update({"name":"john"},{$set:{"name":"john","age":18}},{multi:true})
    

    multi:false表示更新第一个匹配的文档,true表示更新所有匹配的文档。

    5.3 删除文档

    命令格式:

    db.user.remove(<query>)
    # db.表名.remove(<query>)
    # query:删除条件,相当于sql语句中的where
    
    5.3.1 删除所有文档
    db.user.remove({})
    

    5.3.2 删除符合条件的文档
    db.user.remove({"name":"john"})
    

    5.4 查询文档

    命令格式:

    db.collection.find(query, projection)
    # query:查询条件,可不填
    # projection:投影查询key,可不填
    
    5.4.1 查询全部
    # db.表名.find()
    db.user.find()
    

    5.4.2 查询符合条件的记录

    查询name等为"john"的文档。

    db.user.find({"name":"john"})
    

    5.4.3 投影查询

    只显示nameage两个key,_id主键不显示。

    db.user.find({"name":"john"},{name:1,age:1,_id:0})
    

    6. 用户

    6.1 创建用户

    语法格式:

    mongo>db.createUser(
    { user: "<name>",
      pwd: "<cleartext password>",
      customData: { <any information> },
      roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
      ]}
    )
    

    例子:

    创建root用户,角色为root

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

    内置角色如下:

    1. 数据库用户角色:readreadWrite;
    2. 数据库管理角色:dbAdmindbOwneruserAdmin
    3. 集群管理角色:clusterAdminclusterManagerclusterMonitorhostManager
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabase
      dbAdminAnyDatabase
    6. 超级用户角色:root

    角色 介绍
    read 提供读取所有非系统的集合(数据库)
    readWrite 提供读写所有非系统的集合(数据库)和读取所有角色的所有权限
    dbAdmin 提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。
    dbOwner 提供对数据库执行任何管理操作的功能。此角色组合了readWrite,dbAdmin和userAdmin角色授予的权限。
    userAdmin 提供在当前数据库上创建和修改角色和用户的功能。由于userAdmin角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。
    clusterAdmin 提供最佳的集群管理访问。此角色组合了clusterManager,clusterMonitor和hostManager角色授予的权限。此外,该角色还提供了dropDatabase操作。
    readAnyDatabase 仅在admin 数据库中使用,提供所有数据库的读权限。
    readWriteAnyDatabase 尽在admin 数据库中使用,提供所有数据库的读写权限
    userAdminAnyDatabase 尽在admin 数据库中使用,提供与userAdmin相同的用户管理操作访问权限,允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供超级用户访问权限。
    dbAdminAnyDatabase 仅在admin 数据库中使用,提供与dbAdmin相同的数据库管理操作访问权限,该角色还在整个群集上提供listDatabases操作。
    root 尽在admin 数据库中使用,提供超级权限

    6.2 查询用户

    查询当前库下的所有用户:

    show users
    

    6.3 删除用户

    语法格式:

    db.dropUser("用户名")
    

    例子:
    删除root1用户

    db.dropUser("root1")
    

    6.4 修改用户

    语法格式:

    db.updateUser(
      "<username>",
      {
        customData : { <any information> },
        roles : [
                  { role: "<role>", db: "<database>" } | "<role>",
                  ...
                ],
        pwd: "<cleartext password>"
        },
        writeConcern: { <write concern> })
    

    例子:
    修改root用户的角色为readWriteAnyDatabase

    use admin
    db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
    

    6.5 修改密码

    语法格式:

    db.changeUserPassword("username","newPasswd")
    

    例子:
    修改root用户的密码为123

    use admin
    db.changeUserPassword("root","123")
    

    测试连接

    mongo --host 127.0.0.1 -u "root" --authenticationDatabase "admin" -p
    

  • 相关阅读:
    sfs2x 连接 mongodb
    java websocket
    webstorm 4.0 注册码
    解决 sfs2 admin tool 找不到扩展
    window 注册表五大类
    opengl 学习第二日
    java google Protobuf
    扩展 java sencha touch PhonegapPlugin
    sencha touch2 kryonet socket phonegap 通信 作者:围城
    sencha touch2 layout 笔记
  • 原文地址:https://www.cnblogs.com/ifme/p/12048787.html
Copyright © 2011-2022 走看看