MongoDB

作者: zy小太阳 | 来源:发表于2018-12-30 20:03 被阅读0次

    启动 :sudo service mongod |mongodb start
    停止 :sudo service mongod |mongodb stop
    重启 :sudo service mongod |mongodb restart

    设置配置文件

    mongod.conf
    可以设置数据的存储路径 | 设置log日志的存储路径 | 设置端口号
    设置IP | 开启权限

    启动mongo客户端 : mongo

    net start mongo : windows

    关于数据库的基本命令

    查看当前数据库 : db

    查看所有数据库 :show dbs

    创建集合 :

    db.createCollection(name, options) 要切换到数据库下才能创建集合
    (name是要创建的集合的名称,options是一个文档)

    eg:非固定大小的集合 : db.createCollection('info')
    固定大小的集合 : db.createCollection('info', {capped:True,
    size:10, (指定集合的大小)(优先级更高)
    (集合存满时,新数据会覆盖之前的数据) max: (可选)指定固定集合中包含文档的最大数量})

    删除数据库 :db.dropDatabase() (切换到数据库才能删除)

    使用数据库 :use dbname

    查看当前数据库信息 :db.stats

    查看集合 :show collections

    删除集合 :db.集合名称.drop()

    增删改查

    插入文档

    (插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId,是主键,也是索引)
    db.集合名称.insert(document)

    单条插入:

    db.stu.insert(
        {
            _id:'20201226',
            name:'xxxx',gender:1
        }
            )
    

    多条插入:

    db.stu.insert(
        [
            {name:'王明',gender:1},
            {name:'王玲玲',gender:0}
        ]
    )
    

    更新数据

    全文档更新(一个新文档替换之前的文档,ID不变)

    db.集合名称.update(
    {name:'zhangsan'}, 查询条件
    {name:'lisi',class:'1712B'} 新的文档
    { upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
    multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
    }
    )

    局部更新

    db.stu.update(
    {name:'zhangsan'}, 查找条件
    {
    $set:{name:'lisi'} { upsert : 默认情况下为false,要更新的文档不存在,不会插入一条新的数据,
    multi : 默认为false, 只更新查找到的第一条,为True表示更新所有
    }
    }
    )

    更新多条

    db.stu.update(
    {name:'李自成'},
    {
    $set:{gender:0}
    },
    {multi:true}
    )

    save()会根据_id进行查找,如果文档的_id已经存在则修改,如果文档的_id不存在则添加

    eg: db.集合名称.save(
    {
    _id:'20180820101010',
    'name':'zhangsan'
    }
    )

    格式化输出

    db.集合名称.find().pretty()

    删除数据库

    db.dropDatabase(数据库名)

    删除数据(多条)

    db.集合名称.remove(
    {'key':'value'} 条件
    )

    删除单条

    db.集合名称.remove(
    {'key':'value'}, 条件
    1 (不表示数量,表示的是True(False))
    )

    列出集合内所有信息

    db.集合名称.find()

    查询全部

    db.集合名称.find(
    {age:20,gender:1}
    )

    查询一条

    db.集合名称.findOne(
    {age:20,gender:1}
    )

    比较运算符

    等于
    小于 lt 小于等于lte
    大于 gt 大于等于gte
    不等于 $ne

    eg: db.集合.find(
    {'time':{$gt:100},
    {'actor':'李连杰'}
    } )

    逻辑或 $or

    db.集合.find(
    {
    or:[ {time:{gt:100}},
    {actor:'李连杰'}
    ]
    } )

    逻辑或$or和and一起使用

    db.集合.find(
    {
    or:[ {age:{gte:18}},
    {gender:1}
    ],
    name:'gj'
    }
    )

    范围运算符

    $in:在..范围 $nin:不在...范围
    

    db.movie.find(
    {
    times:{$in:[100,120]}
    }
    )

    使用正则查询

    db.集合名称.find(
    {
    'key':/^正则表达式/
    }
    )

    db.集合名称.find(
    {
    'key':{$regex:'正则表达式'}
    }
    )

    $type:只返回符合数据类型的文档

    db.集合名称.find(
    {
    'key':{$type:'数据类型'}
    }
    )

    limit:限制返回

    skip:跳过指点的条数

    db.集合名称.find().limit(num).skip(num)
    注意:limit和skip先后顺序不影响结果

    sort:进行排序 1:升序 -1:降序

    db.集合名称.find().sort({'key':方向(1 or -1),'key2':方向(1 or -1)})

    distinct:实现去重

    db.集合名称.distinct(
    '去重字段',
    {'条件'}
    )

    project(投影):可以选择查询结果中,数据的展示和隐藏

    0表示隐藏,1显示

    db.集合名称.find(
    {'条件'},
    {'key':1}
    )

    假如再设置要显示的字段时,第一个字段设置为1,只展示这一个其他都不展示,反之,只隐藏当前设置的字段,其他的字段都会展示粗来

    count:统计文档的个数

    db.集合名称.count(
    {条件}
    )

    db.集合名称.find({条件}).count()

    mongodb中的聚合操作,主要是处理数据(求和,平均值),

    将处理后的数据返回

    """
    $group:将集合中的文档分组,可用于统计结果。

    $project:修改输入文档的结构。可以用来重命名、增加或
    删除域,也可以用于创建计算结果以及嵌套文档。

    match:用于过滤数据,只输出符合条件的文档。match使
    用MongoDB的标准查询操作。

    $limit:用来限制MongoDB聚合管道返回的文档数。

    $skip:在聚合管道中跳过指定数量的文档,并返回余下的文
    档。

    $unwind:将文档中的某一个数组类型字段拆分成多条,每条
    包含数组中的一个值。

    $sort:将输入文档排序后输出。
    """

    创建超级管理用户

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

    修改普通用户权限或密码

    修改用户:可以修改pwd、roles属性

    注意这里只有超级管理员才有权限修改普通用户的密码和管理权限

    修改用户密码(切换到有权限操作的数据库下)

    db.updateUser(‘ljh',{pwd:'456'})

    添加用户权限(切换到有权限操作的数据库下)
    db.grantRolesToUser('username',[{role:'',db:''}])

    移除用户权限(切换到有权限操作的数据库下)
    db.revokeRolesFromUser('username',[{role:'',db:''}])

    删除用户(方式一)(切换到有权限操作的数据库下)
    db.dropUser('username')

    删除用户 (方式二)
    use admin db.system.users.remove({user:'username'})

    MongoDB备份

    在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

    mongodump -h dbhost -d dbname -o dbdirectory

    -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

    -d: 需要备份的数据库实例,例如:test

    -o: 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

    如果没有开启权限

    mongodump -h 127.0.0.1:27017 -d 数据库名称 -o ~/Desktop/数据库备份的路径

    mongodump -h 127.0.0.1:27017 -o ~/Desktop/数据库备份的路径

    如果开启了权限设置(使用超级管理员权限)我们也可以使用账号密码的方式备份指定用户的数据库

    • 设置了超级管理员也可以使用如下方法备份

    mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath

    恢复备份

    mongodb使用 mongorestore 命令来恢复备份的数据。

    mongorestore -h hostname:port -d dbname --dir path

    -h (host): MongoDB所在服务器地址,默认为: localhost:27017

    -d (db): 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

    --dir: 指定备份的目录

    如果没有开启权限

    mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir 数据库备份文件路径

    mongorestore -h 127.0.0.1 -dir 数据库备份文件路径

    下面是添加了管理员权限之后的备份命令

    如果开启了权限设置(使用超级管理员权限)

    mongorestore -u username -p password --authenticationDatabase 'admin' -d 数据库名称 --dir 数据库备份文件路径

    MongoDB数据导入与导出
    导出工具:mongoexport

    mongoexport -d dbname -c collectionname -o file --type json/csv -f field

    参数说明:

    d :数据库名
    c :collection名
    o :输出的文件名
    -type : 输出的格式,默认为json
    f :输出的字段,如果-type为csv,则需要加上-f "字段名"

    示例:

    导出json

    mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json
    

    导出csv

    mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'
    

    数据导入:mongoimport

    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv
    

    参数说明:

    d:数据库名
    c:collection名
    -type:导入的格式默认json
    f:导入的字段名
    -headerline:如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
    -file:要导入的文件

    示例:

    导入json

    mongoimport -d class1712B -c books --file ~/桌面/dump/books --type json
    

    导入csv

    mongoimport -d class1712B -c info --file ~/桌面/dump/books --headerline --type csv
    

    `

    相关文章

      网友评论

          本文标题:MongoDB

          本文链接:https://www.haomeiwen.com/subject/qcfblqtx.html