zoukankan      html  css  js  c++  java
  • MongoDB 数据库(2)

    db.collectionName 集合对象

    获取集合对象

    db.getCollection('collection_name')
    
    e.g. 
    db.getCollection("class0").insert({name:'悟空',age:1700})
    

    查找操作

    # select  ... from  tableName  where .....
    
    db.collectionName.find()  ---> select * from tableName
    

    find(query,field)

    功能 : 查找所有符合条件的文档
    参数 : query : 筛选条件  相当于where字句
            field : 展示的域  相当于select的展示部分
    返回 : 返回所有查找到的内容
    

    field 参数 : 选择要展示的域 传一组键值对

    键表示域名

    值表示是否显示该域 0 表示不显示 1 表示显示

    • 如果某个域给定0 则表示不显示该域,其他的域均显示
      如果某个域给定1 则表示显示该域 ,其他的域都不显示
    • _id 永远默认为显示,除非设置为0
    • 除_id外其他域 必须拥有相同的设置,全为0或者全为1
    • 如果不写该参数则表示显示所有域内容
    e.g.  db.class0.find({},{_id:0,name:1,age:1})
    

    query : 以键值对的形式给出查找条件

    查找年龄 17
    e.g.   db.class0.find({age:17},{_id:0})
    * 如果不写第一个参数则表示查找所有内容
    

    findOne()

    • 功能参数和find() 完全相同,只是只返回第一条查找到的文档
    e.g.   db.class0.findOne({age:17},{_id:0})
    

    query的更多用法

    操作符: 使用$符号注明一个特殊字符串,表示一定的含义  
    e.g.    $lt  表示 小于
    

    比较操作符

    $eq 等于

    e.g.  db.class0.find({age:{$eq:17}},{_id:0})
          筛选年龄等于17的
    =====》 db.class0.find({age:17},{_id:0})
    

    $lt 小于 <

    e.g.   db.class0.find({age:{$lt:17}},{_id:0})
    mongo中字符串也可以比较大小
    

    $lte 小于等于 <=

    e.g.   db.class0.find({age:{$lte:17}},{_id:0})
    

    $gt 大于 >

    e.g.  db.class0.find({age:{$gt:17}},{_id:0})
    

    $gte 大于等于 >=

    e.g.  db.class0.find({age:{$gte:17}},{_id:0})
    

    $ne 不等于 !=

    e.g.   db.class0.find({age:{$ne:17}},{_id:0})
    如果一个文档没有这个age域则显示为不等于
    

    $in 包含

    e.g.  db.class0.find({age:{$in:[16,17,18]}},{_id:0})
    

    $nin 不包含

    e.g.  db.class0.find({age:{$nin:[16,17,18]}},{_id:0})
    

    逻辑操作符

    $and 逻辑与

    年龄小于19 并且 性别为男
    db.class0.find({age:{$lt:19},sex:'m'},{_id:0})
    年龄小于19 并且 大于15
    db.class0.find({age:{$lt:19,$gt:15}},{_id:0})
    e.g.  db.class0.find({$and:[{age:17},{name:'Lei'}]})
    

    $or 逻辑或

    e.g.
    db.class0.find({$or:[{age:{$lt:22}},{name:'悟空'}]},{_id:0})
    db.class0.find({$or:[{age:{$lt:18}},{age:{$gt:30}}]},{_id:0})
    

    $not 逻辑非

    e.g.  db.class0.find({age:{$not:{$eq:17}}},{_id:0})
    

    $nor 既不也不 (表示列表集合中的条件都不具备)

    db.class0.find({$nor:[{age:{$gt:18}},{sex:'m'}]},{_id:0})
    

    条件混合

    (年龄小于20  或者 姓名为阿红) 并且  性别为女的人
    db.class0.find({$and:[{$or:[{age:{$lt:20}},{name:'阿红'}]},{sex:'w'}]},{_id:0})
    年龄小于等于17  或者  (姓名大于Tom 并且 年龄大于100)
    db.class0.find({$or:[{age:{$lte:17}},{name:{$gt:'Tom'},age:{$gt:100}}]},{_id:0})
    

    数组查找 :

    查看数组中包含某一项的

    e.g.   db.class1.find({hobby:'吃'},{_id:0})
    

    $all

    查找一个数组中同时包含多项的文档

    e.g. db.class1.find({hobby:{$all:['拍电影','代言']}},{_id:0})
    查找hobby数组中既有拍电影,又有代言的文档
    

    $size

    查找数组元素个数为指定个数的文档
    e.g.  db.class1.find({hobby:{$size:3}},{_id:0})
    查找hobby数组中包含三项的文档
    

    $slice

    对数组切片显示

    e.g.
    db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:2}})
    显示数组的前两项
    e.g.
     db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:[1,2]}})
    跳过第一项,显示后面两项
    

    其他查找方法:

    $exists

    判断一个域是否存在

    e.g.  查找存在sex域的文档
    db.class0.find({sex:{$exists:true}},{_id:0})
    e.g.  查找不存在sex域的文档
    db.class0.find({sex:{$exists:false}},{_id:0})
    

    $mod

    做除数余数查找

    e.g. 
    查找年龄 被2除余1的文档 
    db.class0.find({age:{$mod:[2,1]}},{_id:0})
    

    $type

    查找指定数据类型的文档

    e.g. 查找hobby中包含数据类型为 2 的数据的文档
    db.class1.find({hobby:{$type:2}},{_id:0})
    

    数据类型对照 链接

    进一步的信息筛选

    distinct()

    • 功能 : 查看一个集合中某个域值的覆盖范围
    e.g.  查看集合中age域的值都有哪些
    db.class0.distinct('age')
    

    pretty()

    • 功能 : 将查询结果格式化显示
    e.g.    db.class0.find().pretty()
    

    limit(n)

    • 功能: 查询结果显示前 n条
    e.g. 查询结果显示前3个
    db.class0.find({},{_id:0}).limit(3)
    

    skip(n)

    • 功能 : 显示时跳过前n条
    e.g. 显示时跳过前三条
    db.class0.find({},{_id:0}).skip(3)
    

    count()

    • 功能 :对查找结果计数统计
    e.g.  统计sex 为 m的文档数量
    db.class0.find({sex:'m'},{_id:0}).count()
    

    sort({键:1/-1})

    • 功能 : 对查找结果排序
    • 1 表示按照升序排列
    • -1 表示按照降序排列
    对查找结果按照年龄升序排列
    db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1})
    复合排序 : 当第一排序项相同的时候,按照第二排序项排序
    db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1,name:-1})
    

    函数的连续使用

    • 获取集合中年龄最小的三个文档
    db.class0.find({},{_id:0}).sort({age:1}).limit(3)
    
    • 删除文档
    db.collectionName.remove(query,justOne)
    功能 : 删除指定的文档
    参数 :  query : 筛选要删除的文档, 类似where子句
                                用法同 查找操作
    	      justOne :布尔值   默认 false 表示删除所有筛选数据
    	                       如果赋值为true 则表示只删除第一条复合的文档
    
    e.g.  
    db.class0.remove({$or:[{age:{$exists:false}},{age:{$gt:100}}]})
    
    删除第一个复合条件的文档
    db.class0.remove({sex:{$exists:false}},true)
    
    删除集合中所有文档
    db.collectionName.remove({})
    
    1. 创建一个数据库 名字grade 
    use grade
    
    2. 数据库中创建一个集合名字 class
    3. 集合中插入若干数据 文档格式如下
    {name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
    hobby: draw  sing  dance  basketball football  pingpong
           computer 
    
    db.class.insert([
    {name:"zhang",age:10,sex:'m',hobby:['a','b','c']},.....
    ])
    
    4. 查找练习
    查看班级所有人信息
    find()
    
    查看班级中年龄为8岁的学生信息
    find({age:8})
    
    查看年龄大于10岁的学生信息
    find({age:{$gt:10}})
    
    查看年龄在 4---8岁之间的学生信息 
    find({age:{$gte:4,$lte:8}})
    
    找到年龄为6岁且为男生的学生
    find({age:6,sex:'m'})
    
    找到年龄小于7岁或者大于10岁的学生
    find({$or:[age:{$lt:7},age:{$gt:10}]})
    
    找到年龄是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)
    
    查看学生的兴趣范围
    db.class.distinct('hobby')
    
    将学生按年龄排序找到年龄最大的三个
    find().sort({age:-1}).limit(3)
    
    删除所有 年级大于12或者小于4岁的学生
    remove({$or:[{age:{$gt:12}},{age:{$lt:4}}]})
    
  • 相关阅读:
    第一次作业
    第0次作业
    第14、15周作业
    第七周作业
    第六周作业
    第四周作业
    第三周作业
    第4次作业
    第3次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/taoke2016/p/9088674.html
Copyright © 2011-2022 走看看