MongoDB数据库常用操作命令

mongoDB数据库的常用命令:


1.查看当前的数据库:db

2.查看所有的数据库: show databases/show dbs

3.切换数据库: use db_name

4.删除当前的数据库:需要先切换进去,再db.dropDatabase()

5.创建集合(表)的命令
    (1)手动创建:db.createCollection("tb_table_name")
        db.createCollection("sub",{capped:true,size:10})
        参数capped:默认值为false表示不设置上限,
        参数size:当capped值为true时,需指定此参数,表示上限大小,会将之前的数据覆盖。
    (2)不手动创建:第一次向不存在的集合中加入数据时,集合会被创建出来

6.查看集合:show collections/show tables

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


8.集合增加数据:


db.tb_stu.insert({_id:2,username:"小花",gender:true})
db.tb_stu.insert({_id:3,username:"小黑",gender:false})
db.tb_stu.insert({_id:4,username:"大头儿子",gender:true})
db.tb_stu.insert({_id:5,username:"小头爸爸",gender:false})
db.tb_stu.insert({_id:6,username:"红花会",gender:false})


9.db.tb_stu.find() 查询所有数据

10.删除集合中的数据


    1.默认删除所有符合条件的数据
    db.tb_stu.remove({gender:false})

    2.只删除符合条件的一个数据
    db.tb_stu.remove({gender:false},{justOne:true})

    3.删除所有的数据 (必须传递一个参数,可以传递一个空字典)
    db.tb_stu.remove({})

11.修改集合中的数据


    1.db.tb_stu.update({条件},{修改的数据}) (一般不用)

    db.tb_stu.update({_id:2},{username:"小明"})  但是修改后只剩名字了,原来其它的数据如age,gender都被删除了
    因此,一般不用。

    2.使用$set修改,保存原来的数据
    db.tb_stu.update({_id:2},{$set:{username:"花花"}})

    3.修改所有符合条件的数据 加multi:true
    db.tb_stu.update({gender:false},{$set:{age:28}},{multi:true})

    4.删除数据中的某一字段
     db.tb_stu.update({gender:false},{$unset:{username:""}})

12.集合中数据的查询


    1.查询所有的数据 可以传一个空字典
    db.tb_stu.find()/find({})

    db.tb_stu.find().pretty()格式化输出数据

执行下列语句,直接建库建表:
db.stu.insert({_id:1,"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true })
db.stu.insert({_id:2,"name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false })
db.stu.insert({_id:3,"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false })
db.stu.insert({_id:4,"name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true })
db.stu.insert({_id:5,"name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true })
db.stu.insert({_id:6,"name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true })
db.stu.insert({_id:7,"name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true })
db.stu.insert({_id:8,"name" : "Lily", "hometown" : "英国", "age" : 18, "gender" : false })


    2.查询指定条件的数据(也是查询所有符合条件的数据)
    db.stu.find({gender:true})

    3.只查询符合条件的一个数据
    db.stu.findOne({gender:true})  由于只有一条数据 会自动格式化输出

    4.条件运算 $lt(小于),$gt(大于),$lte(小于等于),$gte(大于等于),$ne(不等于)
    //如:查询年龄大于20岁的人
    db.stu.find({age:{$gt:20}})
     
     5.逻辑运算 $and,$or
     1.默认find的多条件,就是 $and
     db.stu.find({gender:true,hometown:"桃花岛"})

     db.stu.find({$and:[{gender:true},{hometown:"桃花岛"}]})

     2.$or 来自大理或者是女生
    db.stu.find({$or:[{gender:false},{hometown:"大理"}]})     

    3.混合使用
    //如:来自桃花岛或者年龄小于45岁 必须是男生
    db.stu.find({$and:[{$or:[{hometown:"桃花岛"},{age:{$lt:45}}],{gender:true}]})

    4.范围运算符 $in,$nin
    db.stu.find({hometown:{$in:["大理","蒙古"]}})

    5.正则表达式
    1./正则/
    db.stu.find({name:/黄/})
    2.$regex
    db.stu.find({name:{$regex:"段"}})

    不区分大小写
    db.stu.find({name:/lily/i})

    db.stu.find({name:{$regex:"lily",$options:"i"}})

    6.自定义函数  $where
    db.stu.find({$where:匿名函数带返回值})

    //取年龄 大于29岁的人 
    db.stu.find({$where:function(){return this.age>20}}) 涉及到变量作用域,使用this

    7.查询结果显示
    1.skip 跳过几个
    2.limit 限制显示的条数
    db.stu.skip(2).limit(2)
    db.stu.limit(2).skip(2)与上面结果一致,但效率没有上面高执行时会先检查skip(2),先执行


聚合查询:(管道有顺序)


db.stu.aggregate([管道1},{管道2}..])

$group分组:

1.按照gender性别分组
db.stu.aggregate([{$group:{_id:"$gender"}}])  (按单个分组没有太大实际意义)
添加push,可以看到name,放在列表中
db.stu.aggregate([{$group:{_id:"$gender",all_name:{$push:"$name"}}}])


2.表达式:(相当于聚合函数) $sum,$avg,$first,$last,$max,$min.  $push
//按照性别分组 求年龄的平均值
db.stu.aggregate({$group:{_id:"$gender",avg_age:{"$avg":"$age"}}})

//按照籍贯分组 求年龄和
db.stu.aggregate({$group:{_id:"hometown",avg_age:{"$avg":"$age"}}})


$match:查找符合条件的数据

//与find查询功能一样,match可以配合管道使用
//取出年龄大于20人
db.stu.aggregate({$match:{age:{$gt:20}}})

//取出年龄小于40的,按照性别分别求年龄平均值
db.stu.aggregate({$match:{age:{$lt:40}}},{$group:{_id:"$gender",avg_age:{$avg:"$age"}}})

project:投影取出部分字段:

//取出年龄大于20;按照籍贯分组 求出年龄之和,求年龄平均值;查看的时候只想看到之和。
db.stu.aggregate({$match:{age:{$gt:20}}},{$group:{_id:"$hometown",age_sum:{$sum:"$age"},age_avg:{$avg:"$age"}}})

//想要显示的字段设置为1,在aggregate中添加一个管道如下
,{$project:{age_sum:1}}


$sort:排序:1升序  -1降序

//先找45以下,再按籍贯分组 求平均值之和,再降序,再投影。
db.stu.aggregate({$match:{age:{$lt:45}}},{$group:{_id:"$hometown",age_avg:{$avg:"$age"},last_sum:{$last:"$age"}}},{$sort:{age_avg:-1}},{$project:{age_avg:-1}})

//注意:管道是有顺序的,不能进行随意颠倒;
$skip 跳过几个查看  $limit 允许显示几个

//先跳过两个 再显示4个
 db.stu.aggregate({$skip:2},{$limit:4})
 db.stu.aggregate({$limit:4},{$skip:2})


$unwind:将数据列表 分割 拆分
//按照性别分组,求出所有人的名字 $push
db.stu.aggregate({$group:{_id:"gender",all_name_list:{$push:"$name"}}},{$unwind:"$all_name_list"})


MongoDB的索引操作


1.创建批量的数据 20w
for (var index = 0;index < 200000;index++){
    db.stu.insert({_id:index,name:"name"+index,age:index})
    }
 2.查看数据的时间 对比 毫秒
 db.xx.find().explain('executionsStats')

 2.1查看_id     "executionTimeMillis" : 0, 显示0表示不足1毫秒
db.stu.find({_id:18888}).explain('executionStats')
  
2.2查看 name     "executionTimeMillis" : 103,
db.stu.find({name:"name188888"}).explain('executionStats')

3.设置ID索引ensureIndex
db.stu.ensureIndex({name:1})

4.删除索引
db.stu.dropIndex('name_1')

5.查看创建的索引
db.stu.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "test.stu"
    },
    {
        "v" : 2,
        "key" : {
            "name" : 1
        },
        "name" : "name_1",
        "ns" : "test.stu"
    }
]

再进行查询name,显示 "executionTimeMill is" : 0


MongoDB的备份和恢复

mongodump -h 127.0.0.1:27017 -d stu -o /home/python/Desktop/mongodata

备份:mongodump -h -d -o
-h host "IP:port"
-d:备份的数据库名字 db
-o:备份到哪


恢复:mongorestore -h 127.0.0.1:27017 -d newstu --dir /home/python/Desktop/mongodata/stu
-h:host
-d:恢复的数据的名字
--dir:从哪里恢复


10.数据的导出和导入


mongoexport -h dbhost -d dbname -c colname -o filename --type json/csv -f field
-h:服务器地址
-d:数据库名
-c:集合名(表)
-o:导出文件名
--type:文件类型,默认json格式,可选数据类型json,csv
-f:需要导出的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件

例如:mongoexport -h "127.0.0.1:27017" -d stu -c col1 -o test1_col1
mongoexport -h 127.0.0.1:27017 -d newstu -c stu -o data.json


导入
mongoimport -d dbname -c collectionname --file  filename --headerline --type 

-d:数据库名
-c:集合名(表)
-o:导出文件名    
--type:文件类型,默认json格式,可选数据类型json,csv
-f:导入的字段名
--headerline:如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
--file:要导入的文件

mongoimport -d newstu -c student_csv --file data.csv --headerline --type


mongodb中常见数据类型


Object ID: 文档ID (可以⾃⼰去设置_id插⼊⽂档,如果没有提供, 那么MongoDB为每个文档提供了一个独特的_id, 类型为objectID)

String: 字符串, 最常⽤, 必须是有效的UTF-8
Boolean: 存储⼀个布尔值, true或false
Integer: 整数可以是32位或64位, 这取决于服务器
Double: 存储浮点值
Arrays: 数组或列表, 多个值存储到⼀个键
Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null: 存储Null值
Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
Date: 存储当前⽇期或时间的UNIX时间格式


连接的mongo数据库,返回的游标对象只能迭代一次,如果想多次遍历,可以使用list对游标对象进行强转。  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值