MongoDB day02

MongoDB day02

集合操作

  1. 获取集合对象
    1. 格式:db.getCollection('class1') ===》 db.class1
    2. e.g.
      db.getCollection('class1').insert({name:'Marry',age:16,sex:'w'})

查找操作

  1. mysql 和 mongo对比
    1. mysql : select … from table where ….
    2. mongo : db.collection.find(query,field)
  2. 查找所有内容
    db.collection.find() ----> select * from table

  3. find(query,field)

    1. 功能 : 查找数据
    2. 参数 : query: 筛选条件,相当于where子句
      field: 选定要展示的域
    3. 返回值 : 返回查找到的文档

    4. query : 以键值对形式给出筛选条件
      {name:'Lily'}

    5. e.g. db.class1.find({name:’Lily’})

    6. field : 以键值对的形式给出要展示(不展示)的域, 域名为键,值为1表示展示,0表示不展示

      * 如果某个域设置为0则表示不展示该域其他的均展示
      * 如果某个域设置为1则表示展示该域其他的均不展示
      * _id必须设置为0才不会显示
      * 除了_id其余设置的值必须相同
      
    7. e.g. db.class1.find({name:'Lily'},{_id:0,name:1,age:1})

  4. findOne(query,field)

    1. 功能 : 只查找第一条复合条件的文档
    2. 参数返回值同find()
    3. e.g. db.class1.findOne({sex:'w'},{_id:0})
    4. query 更多筛选功能

操作符

操作符:使用$符号标注的一个有特殊意义的字符串。用以表达一定的含义。比如 $lt 表示小于

  1. 比较操作符(* 字符串也可以比较大小, 如果某个文档不存在查找的域,则不等于可以匹配到该文档*)
符号 含义 例子
$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})
$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})

逻辑操作符

  1. query 逗号分隔的条件即为与关系
    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. 条件混合
1. 年龄大于16并且为男生 或者 年龄小于14
db.class1.find({$or:[{age:{$gt:16},sex:'m'},{age:{$lt:14}}]},{_id:0})
1. 年龄大于16或者为女生 并且 姓名大于 Jame
db.class1.find({name:{$gt:'Jame'},$or:[{age:{$gt:16}},{sex:'w'}]},{_id:0})

符号 含义 例子
$all 查找数据中同时包含多项 同时包含64 75:db.class3.find({score:{$all:[64,75]}},{_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]}})

其他查找方法

符号 含义 例子
$exists 判断一个域是否存在 查找存在age域的文:db.class1.find({age:{$exists:true}},{_id:0} ), true 表示有这个域 false表示筛选无这个域
$mod 余数查找 查找除以2余数为1的: db.class1.find({age:{$mod:[2,1]}},{_id:0} )
$type 找出值为指定类型的文档 查找age数据类型为1的文档

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

扫描二维码关注公众号,回复: 2423500 查看本文章

$Type具体数字和类型的匹配

Type Number
Double 1
String 2
Object 3
Array 4
Binary data 5
ObjectId 7
Boolean 8
Date 9
Null 10
RE 11
Symbol 14
32-bit integer 16
Timestamp 17
64-bit integer 18

查找结果相关函数

符号 含义 例子
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({域:1/-1}) 功能 : 对查找结果排序,参数 : 以键值对的形式给出,1 表示按照升序排序, -1表示降序排序 按照年龄升序:db.class1.find({},{_id:0}).sort({age:1})

1. 复合排序:当第一排序项相同时比较第二排序项
db.class0.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. 参数 :
      1. query 筛选要删除的文档 相当于where
      用法同查找
      2. justOne : 布尔值,默认为false 表示删除所有。如果设置为true 只删除第一条符合条件的文档。
    3. e.g.
      db.class2.remove({name:"阿蓉"})

    4. e.g. justOne为true则只删除第一条符合条件的
      db.class0.remove({age:17},true)

  3. 删除集合中所有文档

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

    1. 创建数据库 名字 grade
      use grade
    2. 数据库中创建集合 class
    3. 集合中插入文档,格式如下
      {name:’zhang’,age:10,sex:’m’,hobby:[‘a’,’b’]}
      age范围 4-15
      hobby 范围
      [draw dance sing pingpong basketball football running computer]
  5. 查找练习
    查看班级所有人信息
    find()
    查看班级年龄8岁的同学信息
    find({age:8})
    查看年龄大于10岁的学生信息
    find({age:{$gt:10}})
    查看年龄在8-11岁之间的学生信息
    find({age:{$gte:8,$lte:11}}
    查看年龄为9岁且为男生的学生
    find({age:9,sex:'m'})
    找到年龄小于7岁或大于12岁的学生
    find({$or:[{age:{$lt:7}},{age:{$gt:12}}]})
    找到年龄为8岁或者11岁的学生
    find({age:{$in:[8,11]}})
    找到有两项兴趣爱好的学生
    find({hobby:{$size:2}})
    找到兴趣中有draw的学生
    find(hobby:'draw')
    找喜欢画画又喜欢跳舞的学生
    find(hobby:{$all:['draw','dance']})
    统计兴趣有三项的学生人数
    find({hobby:{$size:3}}).count()
    找到本班年龄第二大的同学
    find().sort({age:-1}).skip(1).limit(1)
    查看兴趣的范围
    找到年龄最小的三个同学
    find().sort({age:1}).limit(3)

    • 删除所有年龄大于12或者小于7岁的同学*
      remove({$or:[{age:{$lt:7}},{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和update内容插入新文档
      4. multi: bool值 默认false 如果删选到多条文档则只修改第一条。
      设置为true则表示修改所有筛选到的文档
    3. e.g.
      年龄修改为18:db.class0.update({name:'HanMei'},{$set:{age:18}})
    4. e.g. 如果筛选内容不存在则插入
      db.class0.update({name:'Jame'},{$set:{age:18}},true)

    5. e.g. 如果匹配到多条,则修改所有
      db.class0.update({sex:'w'},{$set:{name:'小芳'}},false,true)

猜你喜欢

转载自blog.csdn.net/luohongtucsdn/article/details/81189204