MongoDB day02

 

目录

查找操作

query更丰富用法

文档的删除操作

修改操作


复习:

非关系型数据库和关系型数据库比较

  1. 不是以关心模型构建的,结构自由
  2. 非关系型数据库不保证数据的一致性
  3. 非关系型数据库可以在处理高并发和海量数据时弥补关系型数据库的不足
  4. 非关系型数据库在技术上没有关系型数据库成熟也没有sql语句操作

mongodb 文档型数据库

  • 创建数据库:use databaseName
  • 删除数据库:db.dropDatabase()
  • 创建集合:db.createCollection()
    db.collection.insert()
  • 删除集合:db.collection.drop()
  • 重命名集合:db.collection.renameCollection(new_name)
    db.getCollection()
  • 查看数据库:show dbs
  • 查看集合:show tables
    show collections
  • 插入文档:insert()  save()

day02

查找操作

  1. mysql 和 mongo对比 
    1. mysql : select * from table where ….
    2. mongo : db.collection.find(query,field)
  2. find(query,field)
    1. 功能:查找数据
    2. 参数:
      query筛选条件,相当于where子句
      field选择要展示的域
    3. 返回值:返回要查找的文档
    4. 查找所有内容
      db.collection.find()--->select * from tabls
    5. query:以键值对的形式给出查找条件
      e.g.:db.class0.find({name:'Lucy'})
    6. field:以键值对的形式给出要展示(不展示)的域
      域名为键,0为值表示不显示该域,1为值表示显示该域

      * 如果某个域设置为0则表示不展示该域其他的均展示
      * 如果某个域设置为1则表示展示该域其他的均不展示
      * _id必须设置为0才不会显示
      * 除了_id其余设置的值必须相同
      *如果不写该参数,则表示显示所有内容

      e.g.:db.class1.find({sex:'m'},{_id:0,name:1,age:1})
  3. findOne(query,field)
    1. 功能:查找符合条件第一条文档
    2. 参数:同find
    3. 返回值:查找到的文档
      e.g.:db.class0.findOne({age:17},{_id:0})

query更丰富用法

操作符:使用$号注明的一个特殊意义子串,表达某个特定含义。比如$gt 表示大于

  比较操作符(字符串也可以比较大小)

符号含义例子
$eq等于db.class1.find({age:{$eq:13}},{_id:0})  db.class1.find({age:13},{_id:0})
$lt小于 <

年龄小于15: db.class1.find({age:{$lt:15}},{_id:0})

db.class1.find({name:{$lt:'Tom'}},{_id:0})

字符串也可以比较大小

$lte小于等于 <=小于等于15:db.class1.find({age:{$lte:15}},{_id:0})
$gt大于 >大于15:db.class1.find({age:{$gt:15}},{_id:0})
$gte大于等于 >=大于等于15: db.class1.find({age:{$gte:15}},{_id:0})
$ne不等于 !=不等于13:db.class1.find({age:{$ne:13}},{_id:0})
$in包含年龄包含 在11,12,13,14的:db.class1.find({age:{$in:[11,12,13,14]}},{_id:0})
$nin不包含年龄不是13,14:db.class1.find({age:{$nin:[13,14]}},{_id:0})

逻辑操作符

query中如果多个条件用逗号隔开即为and关系

  1. e.g. 年龄大于13 小于16 
    > db.class1.find({age:{$gt:13,$lt:16}},{_id:0})
  2. e.g. 年龄大于13且性别为女 
    > db.class1.find({age:{$gt:13},sex:'w'},{_id:0})
符号含义例子
$and逻辑与年龄大于13 :并且姓名大于Lily db.class1.find({$and:[{age:{$gt:13}},{name:{$lt:'Lily'}}]},{_id:0})
$or逻辑或年龄大于15或者为男生:db.class1.find({$or:[{age:{$gt:15}},{sex:'m'}]},{_id:0})
$not逻辑非年龄不大于15:db.class1.find({age:{$not:{$gt:15}}},{_id:0})
$nor既不也不既不大于16 也不是女生:db.class1.find({$nor:[{age:{$gt:16}},{sex:'w'}]},{_id:0})

条件混合

  1. 年龄大于30并且叫阿宝或者性别为w
    db.class1.find({$or:[{age:{$gt:30},name:'阿宝'},{sex:'w'}]},{_id:0})
  2. 年龄小于30或者大于33,并且性别为女
    db.class1.find({$and:[{$or:[{age:{$lt:30}},{age:{$gt:33}}]},{sex:'m'}]},{_id:0})

    db.class1.find({$or:[{age:{$lt:30}},{age:{$gt:33}}],sex:'m'},{_id:0})

 

数组

表达:使用中括号将一定的数据组织成一种数据结构

  • 数组中的数据类型可以不同
  • 数组是有序的
    e.g.:数组值中只要有任意一项大于90即可
    db.class2.find()
    { "_id" : ObjectId("5b7a3ca3e474620ab42e819e"), "name" : "小红", "age" : 9, "score" : [ 92, 79, 88 ] }
    { "_id" : ObjectId("5b7a3d53e474620ab42e819f"), "name" : "小明", "age" : 9, "score" : [ 77, 69, 58 ] }
    { "_id" : ObjectId("5b7a3d83e474620ab42e81a0"), "name" : "小刚", "age" : 8, "score" : [ 87, 98, 88 ] }
    { "_id" : ObjectId("5b7a3dade474620ab42e81a1"), "name" : "小丽", "age" : 10, "score" : [ 97, 85, 79 ] }
    
    
    > db.class2.find({score:{$gt:90}},{_id:0})
    { "name" : "小红", "age" : 9, "score" : [ 92, 79, 88 ] }
    { "name" : "小刚", "age" : 8, "score" : [ 87, 98, 88 ] }
    { "name" : "小丽", "age" : 10, "score" : [ 97, 85, 79 ] }
    

     

符号含义例子
$all查找数据中同时包含多项同时包含97 79:db.class2.find({score:{$all:[97,79]}},{_id:0})
$size通过数组元素个数查找db.class3.find({score:{$size:3}},{_id:0})
$slice取出数组的部分进行显示 放在field中

显示数组中前两项:db.class3.find({},{_id:0,score:{$slice:2}}) 

跳过第一项显示后面二项:db.class3.find({},{_id:0,score:{$slice:[1,1]}})

其它query查询

 

符号含义例子
$exists判断一个域是否存在

查找存在sex域的文档:

db.class2.find({sex:{$exists:true}},{_id:0})

, true 表示有这个域 false表示筛选无这个域

$mod余数查找

查找除以2余数为1的:

db.class2.find({age:{$mod:[2,1]}},{_id:0})

$type找出值为指定类型的文档

查找age数据类型为1的文档(1代表double类型)

db.class1.find({age:{$type:1}},{_id:0})

查找name字符类型为2的文档(2代表字符类型)

db.class2.find({name:{$type:2}},{_id:0})

操作符用法文档查找

www.mongodb.com --> docs --> search

 

查找结果的进一步操作

符号含义例子
distinct()功能:查看集合某个域的取值范围查看集合中age域值的范围:db.class1.distinct("age")
pretty()功能: 格式化显示查找结果db.class1.find().pretty()
limit(n)功能: 显示查找结果的前n条显示查找结果的前三条 :db.class1.find({},{_id:0}).limit(3)
skip(n)功能 : 跳过前n条显示跳过前三条显示后边的内容:db.class1.find({},{_id:0}).skip(3)
count()功能 : 计数统计统计男生数量:db.class1.find({sex:'m'},{_id:0}).count()
sort({field:1/-1})

功能 : 对查找结果排序,

参数 : 以键值对的形式给出,

1 表示按照升序排序, -1表示降序排序

按照年龄升序:db.class1.find({},{_id:0}).sort({age:1})
复合排序当第一排序项相同时比较第二排序项,以此类推db.class1.find({},{_id:0}).sort({age:1,name:1})

函数的连续调用

  1. 当一个函数的返回结果仍然是文档集合的时候可以连续调用函数
  2. e.g.:查看年龄最小的三个文档
    db.class1.find({},{_id:0}).sort({age:1}).limit(3)

文档的删除操作

  1. mysql格式: delete from table where …
  2. mongodb格式: db.collection.remove(query,justOne)

    1. 功能:删除文档

    2. 参数:
        query筛选要删除的文档,相当于where,用法同查找
        justOne 布尔值,默认为false,表示删除所有符合条件的文档,如果是true,只删除第一条符合条件的文档

    3. e.g.:删除年龄域不是数字类型的
      db.class1.remove({age:{$not:{$type:1}}})

    4. e.g.:删除第一个年龄为17的文档
      db.class1.remove({age:17},true)

  3. 删除一个集合中所有文档
    db.collection.remove({})

    1. e.g.:删除class2中所有文档
      db.class2.remove({})

  4. 练习:

    1. 创建数据库 名字grade
      use grade

    2. 数据库中创建集合 名字 class

    3. 集合中插入若干文档格式如下
      {name;'zhang',age:10,sex:'m',hobby:['a','b'...]}
      年龄在4-13岁之间
      hobby 几项都可以,可选项:draw  sing  dance  basketball  football  pingpong  running computer
      db.class.insert({name:'zhang',age:10,sex:'m',hobby:['a','b'...]})

  5. 查询练习:

    1. 查看班级所有人信息
      db.class.find()

    2. 查看年龄大于10岁的学生信息
      db.class.find({age:{$gt:10}})

    3. 查看年龄8-11岁之间的学生信息
      db.class.find({age:{$gt:8,$it:11}})

    4. 找到年龄9岁且为男生的学员
      db,class.find({age:9,sex:'m'})

    5. 找到年龄小于7岁或者大于11岁的学生
      db.class.find({$or:[{age:{$it:7}},{age:{$gt:7}}]},{_id:0})

    6. 找到年龄7岁或者11岁的学生
      db.class.find({age:{$in:[7,11]}})

    7. 找到有两项兴趣爱好的学生
      db.class.find({hobby:{$size:2}})

    8. 找到喜欢computer学生
      db.class.find({hobby:'computer'})

    9. 找到既喜欢画画,又喜欢跳舞的学生
      db.class.find({hobby{$all:['draw','dance']}})

    10. 统计兴趣爱好有3项的学生人数
      db.class.find({hobby:{$size:3}}).count()

    11. 找到本班年龄第二大的学生
      db.class.find({}).sort({age:-1}).skip(1).limit(1)

    12. 查看学生学生兴趣爱好的范围
      db.class.distinct('hobby')

    13. 找到年龄最小的的三个同学
      db.class.find({}).sort({age:1}).limit(3)

    14. 删除所有年龄小于6岁或者大于12岁的学员
      db.class.remove({$or:[{age:{$lt:6}},{age:{$gt:12}}]})

修改操作

  1. mysql格式:update table set … where …
  2. mongodb格式:db.collection.update(query,update,upsert,multi)

    1. 功能:修改文档

    2. 参数:
      1,query: 筛选要修改的文档,相当于where,用法同查找
      2,update: 将筛选的文档修改为什么内容,相当于set,需要配合修改操作符一同使用
      3,upsert: bool值,默认false,如果query的文档不存在则不进行任何操作,如果设置为true则如果query的文档不存在就根据query和update插入新文档
      4,multi: bool值,默认为false,如果query文档有多条则只修改一条,如果设置为true,则修改所有条件文档

    3. e.g.:将小白年龄改为31
      db.class1.update({name:'小白'},{$set:{age:31}})

    4. e.g.:修改文档,如果文档不存在则插入
      db.class1.update({name:'阿蓉'},{$set:{age:29}},true)

    5. e.g.:如果有多个年龄小于32的则全部修改
      db.class1.update({age:{$lt:32}},{$set:{age:28}},false,true)

作业:

  1. 练习查找,删除操作,记忆操作符使用,回顾文档的查找方法
  2. 回顾文档的查找方法
  3. 将课上练习再进行熟练

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值