mongodb

mongodb的简单操作

mongodb的安装与启动

链接: https://my.oschina.net/u/2417992/blog/3053325

mongodb中数据库和集合的命令

  • 数据库不需要提前创建,插入数据时自动创建

    • show dbs 查看所有的数据库
    • use 数据库名 # 使用数据库
    • 数据库名.dropDatabase() # 删除数据库
  • 集合不需要提前创建,插入数据时自动创建

    • show collections # 查看所有集合
  • db.集合名.drop() # 删除集合

    • db.集合名.find() # 查看集合中的所有数据
  • db.集合名.find({条件}) # 查询特定条件的数据

插入数据(insert和save的区别)

  • db.集合名.insert() # 插入数据,_id重复会报错
  • db.集合名.save() # 如果_id存在则更新,如果不存在则插入新数据

更新数据

  • db.集合名.update({ KaTeX parse error: Expected 'EOF', got '}' at position 14: set:{需要修改的数据}}̲)`db.jarvis.upd…set{age:1}})`将age修改为1
  • db.jarvis.update({name:1023},{$set:{age:1}},{multi:true})多行修改

删除数据

  • db.集合名.remove({条件}, {justOne:true}) # 设置justOne参数删除一条数据
  • db.集合名.remove({条件}) # 默认删除所有符合条件的数据

比较运算符

db.stu.insert([{
     "name":"郭靖","hometown":"蒙古","age":20,"gender":true},{
     "name":"黄蓉","hometown":"桃花岛","age":18,"gender":false},{
     "name":"华筝","hometown":"蒙古","age":18,"gender":false},{
     "name":"黄药师","hometown":"桃花岛","age":40,"gender":true},{
     "name":"段誉","hometown":"大理","age":16,"gender":true},{
     "name":"段王爷","hometown":"大理","age":45,"gender":true},{
     "name":"洪七公","hometown":"华山","age":81,"gender":true}])
  • 小于:查询年龄小于20岁的人:db.stu.find({"age":{$lt:20}})
  • 小于等于:查询年龄小于等于20的人db.stu.find({"age":{$lte:20}})
  • 大于:查询年龄大于20的人:db.stu.find({"age":{$gt:20}})
  • 不等于:查询年龄不等于20的人db.stu.find({"age":{$ne:20}})

逻辑运算符

  • 与:直接写多个条件,查询年龄不等于20且家乡是蒙古的db.stu.find({"age":{$ne:20},hometown:"蒙古"})
  • 或:使用KaTeX parse error: Expected '}', got 'EOF' at end of input: …组`db.stu.find({ or:[{“age”:{$lt:20}},{hometown:“蒙古”}]})`

范围查询

  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …ind({hometown:{ in:[“蒙古”,“桃花岛”]}}`
  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …ind({hometown:{ nin:[“蒙古”,“桃花岛”]}})`

正则匹配

db.pro.insert([{
     stu:"abc123",tea:"jarvis"},{
     stu:"abc456",tea:"wu"},{
     stu:"xyz123",tea:"zhangsan"}])
  • 使用/ /:db.pro.find({stu:/^abc/})查找stu的值以abc开头的数据,db.pro.find({stu:/123$/})查找stu的值以123结尾的所有数据

skip和limit

  • 方法limit():用于读取指定数量的文档db.stu.find().limit(3):限制读取三条数据
  • 方法skip():用于跳过指定数量的文档db.stu.find().skip(3):跳过前三条数据
  • 同时使用:一般先使用skip()再使用limit()可以效率更快db.stu.find().skip(1).limit(2):跳过一条数据再读取两条数据

排序

方法sort(),用于对集合排序,参数1为升序,参数-1为降序

  • db.stu.find().sort({age:1,gender:-1}):按照年龄升序,性别降序进行排序,先按年龄排序,再按性别排序

统计个数

方法count(),用于查询包含指定条件的元素出现的次数

  • 查询集合中元素的总数db.stu.count()
  • 查询年龄大于等于18的元素:db.stu.count({age:{$gte:18}})

去重

方法distinct(),返回一个数组

  • 查询所有人的hometown是哪些地方:db.stu.distinct("hometown")
  • 查询年龄大于18的人的hometwon:db.stu.distinct("hometown",{age:{$gt:18}})

投影

显示指定的字段的内容

  • 查询所有人的姓名:db.stu.find({},{name:1}) 参数值为1表示true,0表示false
  • 查询所有人的姓名,不包含_id db.stu.find({}, {name:1,__id:0})
  • 查询年龄大于18的人的姓名:db.stu.find({age:{$gt:18}},{name:1})

mongodb管道命令

mongodb的常用管道和表达式

管道命令

  • $group:将集合中的文档分组,可用于统计结果
  • $match:过滤数据,只输出符合条件的文档
  • $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
  • $sort:将输入文档排序后输出
  • $limit:限制聚合 管道返回的文档数
  • $skip:跳过指定数量的文档,并返回余下的文档

常用表达式

  • s u m : 计 算 总 和 , sum:计算总和, sum:sum:1 表示以一倍计数
  • $avg:计算平均值
  • $min:获取最小值
  • $max:获取最大值
  • $push:在结果文档中插入值到一个数组中

管道命令之$group

求以hometown分组的元素个数,总年龄以及平均年龄

db.stu.aggregate({$group:{_id:"$hometown",count:{$sum:1},total_age:{$sum:"$age"},avg_age:{$avg:"$age"}}})

  • _id: 分组的依据
  • $age: 取age对应的值
  • $sum:1 : 把每条数据作为1进行统计,统计的是个数
  • s u m : " sum:" sum:"age": 统计年龄对应的和
  • $group : 对应的字典中的键是输出数据的键

不分组,求整个文档中各个数据的情况

db.stu.aggregate({$group:{_id:null,count:{$sum:1},total_age:{$sum:"$age"},avg_age:{$avg:"$age"}}})

统计整个文档

  • 数据透视(把不同行的数据放到一行来展示)

    db.stu.aggregate({$group:{_id:"$gender",name:{$push:"$name"},hometown:{$push:"$hometown"}}})
    

管道命令之$match

在管道中过滤数据

  • 统计年龄大于18的人的年龄
db.stu.aggregate({$match:{age:{$gt:18}}},{$group:{_id:"$age"}})

管道命令之$project

输出自己想要了解的字段

  • 输出所有的name对应的值,不输出_id

    db.stu.aggregate({$project:{name:1,_id:0}})
    

$skip $limit $sort

s o r t 排 序 、 sort排序、 sortskip跳过、$limit限制

db.stu.aggregate(
{$group:{_id:"$hometown",count:{$sum:1}}},
{$sort:{count:-1}},
{$skip:1},
{$limit:2})

mongodb的索引与备份

mongodb创建索引的方法

  • 语法:
    • db.集合名.createIndex({属性:1}) , 1表示升序,-1表示降序
  • 具体操作:db.t255.createIndex({name:1})

创建索引前后查询速度对比

测试:插入10万条数据到数据库中

for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})}

创建索引前:

db.t255.find({name:'test100000'})
db.t255.find({name:'test100000'}).explain('executionStats')

创建索引后:

db.t255.createIndex({name:1})
db.t255.find({name:'test100000'}).exlain('executionStats')

索引查看

默认情况下,_id是集合的索引

查看方式:db.t255.getIndexes()

mongodb创建唯一索引

在默认情况下mongodb的索引字段的值是可以相同的,仅仅能够提高查询速度,不能保证数据的唯一性,添加唯一索引的语法:

db.t255.createIndex({name:1},{unique:true})

mongodb的备份和恢复

  • 备份的语法:mongodump -h dbhost -d dbname -o dbdirectory

    • -h:服务器地址,也可以指定端口号
    • -d:需要备份的数据库名称
    • -o:备份的数据存放位置,此目录中存放着备份出来的数据
  • 示例:mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak

  • 恢复的语法:mongorestore -h dbhost -d dbname --dir dbdirectory

    • -h:服务器地址
    • -d:需要恢复的数据库实例
    • –dir:备份数据所在的位置
  • 示例:mongorestore -h 192.168.128:27017 -d test2 --dir ~/Desktop/test1bak/test1

pymongo的使用

  • 安装:pip install pymongo

  • 建立连接:

    from pymongo import MongoClient
    # 建立和MongoDB的链接
    client = MongoClient(host='服务器ip', port=27017)
    collection = client['test100']['t1']
    # 插入一条数据
    collection.insert_one({
           "name":10086,"age":20})
    
  • 插入一条数据:isnert_one

  • 插入多条数据:insert_many

  • 删除一条数据:delete one

  • 删除多条数据:delete many

  • 修改一条数据:update_one

  • 修改多条数据:update_many

  • 查找一条数据:find_oen

  • 查找多条数据:find

你可能感兴趣的:(mongodb)