mongodb的使用(查)

本文详细介绍MongoDB中数据的查找、更新与删除等基本操作,包括查询语法、条件筛选、数组操作及结果处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 查看所有的内容:

    db.collection.find(querry, filed)

    find(query, filed)
        功能:查找文档
        参数:query 查找条件 相当于where子句
            field 查找的域

        返回值:查找到的所有文档

        query:以键值对的方式传递参数,如果是空{}表示查找所有内容\

        field:以键值对的方式给出要查找或不查找的域
                  以域名为键,以0,1为值分别表示不查找和查找

          *如果某一个或者多个域设置为0 表示这些域不查找,其他域均查找
          *如果某一个或多个域设置为1,表示这些域查找,其他域均不查找
          *_id除非设置为0,否则均会查找
          eg:查找结果只有name域
           db.class0.find({sex:'w'},{_id:0,name:1})

  • findOne(query,filed)

    功能: 查找第一条符合条件的文档
    参数: 同find
    返回值: 返回查找到的文档

    query更新过的筛选用法:

    操作符:使用$符号,著名的一个特殊字符串,表达一定的含义,比如$lt 表示小于

  • 比较操作符

    $eq  等于  ==
        eg:查找年龄等于18
            db.class0.find({age:{$eq:18}},{_id:0})

    $lt  小于  <
        eg:查找年龄小于18
            db.class0.find({age:{$lt:18}},{_id:0})  
            db.class0.find({name:{$lt:'helly'}},{_id:0})

        *在mongodb中字符串可以比较大小

    $lte 小于等于  <=
        eg:查找年龄小于等于18
            db.class0.find({age:{$lte:18}},{_id:0})

    $gt 大于  >
        eg:查找年龄大于16小于19
            db.class0.find({age:{$gt:16,$lt:19}},{_id:0})

    $ gte 大于等于  >=
        eg: 查找年龄大于等于16小于19
            db.class0.find({age:{$gte:16,$lt:19}},{_id:0})
        *在mongodb中所有的{}[]中都可以写多个条件,但根据参数的不同表达的意思不一样

    $ne 不等于  !=
        eg: 性别不等于'm'的
            db.class0.find({sex:{$ne:'m'}},{_id:0})

        *使用ne查找也会找到该域不存在的文档

    $in 包含
        eg:找到年龄为[12,18]
            db.class0.find({age:{$in:[12,18]}},{_id:0})

    $nin 不包含
        eg:找到年龄不为[12,18]的其他人的信息
            db.class0.find({age:{$nin:[12,18]}},{_id:0})

  • 逻辑操作符

    $and  逻辑与
        1.在query中如果写多个条件默认即为and
        eg:年龄小于等于18,性别为'w'
            db.class0.find({$and:[{age:{$lt:18}},{sex:'w'}]},{_id:0})
    
    $or   逻辑或
        eg:查找出年龄小于15或者性别为['w','women']
            db.class0.find({$or:[{age:{$lt:15}},{sex:{$in:['w','women']}}]},{_id:0})

    $not  逻辑非
        eg:查找年龄不小于18
            db.class0.find({age:{$not:{$lt:18}}},{_id:0})

    $nor  not(a or b)===>not(a) and not(b)

        eg:姓名不能小于helly,年龄不能大于15
            db.class0.find({$nor:[{name:{$lt:"helly"}},{age:{$gt:15}}]},{_id:0}


    逻辑条件混合

    年龄大于17岁,并且为男生  或者姓名叫 Abby

    (年龄不大于15或者为女性)并且姓名大于luccy
    db.class0.find({$and: [{$or:[{age:{$not:{$gt:15}}},{sex:{$in:['w','women']}],{name:{$gt:'luncy'}}]},
    {_id:0})

  • Array

    [1,2,3,4]
    *数组是有序的数据集合
    *mongo中数组也可以有多重数据元素混合

    查找数组中包含某一条件的元素
    eg:只要socre数组中包含小于60的元素即可查询过滤掉
        db.class1.find({score:{$lt:60}},{_id:0})

    $all
        查找数组中同时包含多项的文档
        eg:查看数组中同时包含49,67的
            db.class1.find({score:{$all:[49,67]}},{_id:0})
    $size
        通过数组元素个数查找

    $slice
        显示数组中指定项
        eg:显示数组前两项
        db.class1.find({},{_id:0,socre:{$slice:2}})

        eg:显示数组索引下标1到2
        db.class1.find({},{_id:0,socre:{$slice:[1,2]}})

  • 其他常用查找操作符

    $exists
    通过某个域是否存在筛选
    eg:查找不包含sex的文档
        db.class1.find({sex:{$exists:false}},{_id:0})

    $mod
    余数查找
    eg:找出年龄为单数的文档
    db.class1.find({age:{$mod:[2,1]}},{_id:0})

    $type
    类型查找
    eg:查找name值域类型为2的文档
        db.class1.find({name:{$type:2}},{_id:0})

  • 查找结果的操作函数

    distinct(filed)
    db.collection.distinct(filed)
    功能:查看某个域的值范围
    eg:获取某个域的值范围:去重
    db.class0.distinct("name")

    prteey()
    db.collection.find.prteey()
    功能:格式化显示查询结果
    eg:
    db.class0.find().pretty()

    limit(n)
    db.collection.find().limit(n)
    功能:显示前n条结果
    eg:显示前3条查询的结果
    db.class0.find({},{_id:0}).limit(3)

    skip(n)
    db.collection.find().skip(n)
    功能:跳过前n条,显示后面的结果
    eg:跳过前10条显示后面的查询结果
    db.class0.find({},{_id:0}).skip(10)

    count()
    db.collection.find().count()
    功能:统计查询结果数量(如果不添加查询条件,不准确)
    *在统计数量时要给出一定的querry条件
    eg:统计性别为'm'的文档个数
    db.class0.find({sex:'m'},{_id:0}).count()

    sort({field:1/-1})
    db.collection.find().sort({field:1/-1})
    功能:对查找结果排序
    参数:以键值对表示按照哪个field排序
        1表示升序,-1表示降序
    eg:查找结果按照降序排序
    db.class0.find({},{_id:0}).sort({age:-1})
    eg:按照年龄升序排序,年龄相同时则按照姓名降序
    db.class0.find({},{_id:0}).sort({age:1,name:1})


    函数的连续调用:
    eg:
    db.class0.find({},{_id:0}).sort({age:1,name:1}).limit(3)

    删除文档
    mysql:delete from table where ...

    mongodb:db.collection.remove(query, justOne)

    remove(query,justOne)
    功能:删除文档
    参数:query 用法同查找(find)
        justOne  布尔值  默认为false表示删除所有符合条件的文档
                        设置为true则表示只删除一条
    eg:删除所有不存在sex域的文档
    db.class1.remove({sex:{$exists:false}},{_id:0})
    eg:删除第一条性别为'w'的文档
    db.class1.remove({sex:'w'},true)

    删除所有非object为1的文档
    db.class0.remove({_id:{$not:{$type:7}}})

    删除集合中所有的文档
    eg:删除class1中所有的文档
    db.class1.remove({})

  • 练习:

    1.创建数据 名称 grade
    2.创建集合 名称 class
    3.集合中插入若干文档 文档格式
    {name:'zhangsan',age:10,sex:'m',hobby:['a','b']}
    年龄范围:6-15
    爱好选择:draw sing dance basketball football pingpang
            computer 每个同学选择2-5项

    4.查找练习
    查看班级中所有学生信息
    db.class.find()
    查看班级中年龄为8岁的学生的信息
    db.class.find({age:8},{_id:0})
    查看班级中年龄大于10岁学生的信息
    db.class.find({age:{$gt:10}},{_id:0})
    查看班级中年龄在8-11岁之间的学生的信息
    db.class.find({age:{$gte:8,$lte:11}},{_id:0})
    查看班级中年龄为10岁且为男生的学生信息
    db.class.find({age:10,sex:'m'},{_id:0})
    查看班级中小于7岁或者大于14岁的学生
    db.class.find({$or:[{age:{$lt:7}},{age:{$gt:14}}]},{_id:0})
    查看班级中年龄为8岁或者11岁的学生
    db.class.find({$or:[{age:8},{age:11}]},{_id:0})
    db.class.find({age:{$in:[8,11]}})
    找到有2项兴趣爱好的学生
    db.class.find({hobby:{$size:2}},{_id:0})
    找到兴趣中有draw的学生
    db.class.find({hobby:{$all:['draw']}},{_id:0})
    找到即喜欢画画又喜欢跳舞的学生
    db.class.find({hobby:{$all:['draw','dance']}},{_id:0})
    统计兴趣有4项的学生人数
    db.class.find({$size:4}).count()
    找出本班年龄第二大的学生
    db.class.find().sort({age:-1}).skip(1).limit(1)
    查看本班学生兴趣爱好覆盖哪些方面
    db.class.distinct('hobby')
    找到年龄最大的三个学生
    db.class.find().sort({age:-1}).limit(3)
    删除所有年龄大于16岁或者小于7岁的学生除非它的特殊爱好有3项以上
    db.class.remove({$or:[{age:{$lt:7}},{age:{$gt:16}}],{hobby:{$size:2}}})

  • 修改文档

      mysql:update table set... where ...

      mongodb:db.colleection.update(query,update,upset,multi)

      update(query,update,upset,multi)
        功能:修改文档
        参数:query   筛选条件 用法同find
        
        update  要修改成什么内容,通常配合修改操作符(修改器)使用
        
        upsert  布尔值,默认是false 如果query没有筛选到文档则不
                做任何操作,如果设置为true,则如果query没有筛选到
                匹配文档则根据query和update内容插入到新的文档
        
        multi   布尔值,默认为false表示如果有多条符合条件
                文档则只修改第一条如果设置为true则表示修改所有的
                符合条件的文档

eg:将Tom的年龄修改为28
db.class0.update({name:'Tom'},{$set:{age:28}})
eg:插入一条新的文档
db.class0.update({name:'Jame'},{$set:{age:18}},true)
eg:修改所有年龄小于17的为18
db.class0.update({age:{$lt:17}},{$set:{age:20}},false,true)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值