初识Mongdb之数据查询篇(一)

目录

数据查询

介绍

简单查询

无约束查询

查询条数

约束查询

and 查询

or 查询

大于查询(>)

小于查询(<)

小于等于,大于等于查询

不等于查询

高级查询

包含($in)和不包($nin)含查询

not 查询,模糊查询(like)

数组特定查询(all)

Limit(num)

Skip()

sort()排序

设计查询字段和返回字段

简单插入

总结

每文一语


数据查询

介绍

下面的数据集都是模拟的虚拟数据集。如果有需要可以点击此处下载

直接在Navicat上运行下载文件即可,就会产生数据集,用于查询的练习

MongoDB 查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

collection:集合(类似于MySQL里面的表)

query :可选,使用查询操作符指定查询条件。

projection :可选,指定返回的键。

说实话mongdb的查询语法基本就是这样,但是就只是这些吗?那肯定不是,如果说看了那些复杂的语法,还不如把实际问题简化,把学习问题放在实际中,那么我们下面就开始介绍查询案例,希望对你有所帮助!

简单查询

无约束查询

不加任何约束条件的查询,返回的是全部的信息

//无约束查询
db.students.find();

查询条数

db.students.count();

约束查询

在MySQL里面我们经常用到where来约束我们的查询,用字段返回我们需要的,那么在mongdb我们同样也可以这样,下面我们首先来看看这个对比表:

mongdb-MySQL对比表
操作格式范例RDBMS中的类似语句
等于{<key>:<value>}db.col.find({"by":"王小王"}).pretty()where by = '王小王'
小于{<key>:{$lt:<value>}}db.col.find({"likes":{$lt:50}}).pretty()where likes < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"likes":{$lte:50}}).pretty()where likes <= 50
大于{<key>:{$gt:<value>}}db.col.find({"likes":{$gt:50}}).pretty()where likes > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"likes":{$gte:50}}).pretty()where likes >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"likes":{$ne:50}}).pretty()

  where likes != 50

or{$or:[{key1: value1}, {key2:value2}]}db.col.find($or:[{c{$gte85}}{e{$gte90}}])where like =123 or like=456
and{key:123,key:456}db.col.find({"like":"123","like":456})where like=123 and 456

and 查询

//查询身高是170和身高是160的数据,返回全部信息
db.students.find({height:170,height:160});

or 查询

//查询身高大于175的或者低于160的学生信息
db.students.find({
    $or: [{
        height: {
            $gt: 175
        }
    }, {
        height: {
            $lt: 160
        }
    }]
})

大于查询(>)

//查询身高大于175的学生,性别为1的学生
db.students.find({height:{$gt:175},gender:1})

小于查询(<)

//查询身高小于160的学生,性别为0的学生
db.students.find({height:{$lt:160},gender:0});

小于等于,大于等于查询

这里我就不给出演示了,直接上代码:

//查询大于等于175,小于等于175的学生信息
db.students.find({height:{$gte:175}});

db.students.find({height:{$lte:175}});

不等于查询

//查询身高不等于175的学生
db.students.find({height:{$ne:175}});

对于一些基本的操作比较的查询差不多就是这样,唯一需要注意的就是or查询,需要把条件放在列表里面,里面根据你的需要嵌套你的字典约束条件,在mongdb里面如果是字符串可以不用加引号,但是如果是数值型的,加了引号反而会报错!

高级查询

包含($in)和不包($nin)含查询

//查询年级在2015和2017里面的学生信息,避免写多个and
db.students.find({
    grade: {
        $in: [2015, 2016, 2017]
    }
});

//查询年级不在2015和2017里面的学生信息,避免写多个and
db.students.find({
    grade: {
        $nin: [2015, 2016, 2017]
    }
});

not 查询,模糊查询(like)

$not”是元条件句,即可以用在其他条件之上(正则和文档)$not$nin的区别是$not可以用在任何地方$nin只能用到集合上

//查询name不包含颢炜的信息,类似于MySQL的模糊查询 like
db.students.find({
    name: {
        $not: /颢炜/
    }
});


//模糊查询名字里面的联想词
db.students.find({
name:/冬睿/
})

数组特定查询(all)

这个要特定与特定的场景之下,比如在字典嵌套字典的前提之下,在一个文档集合里面,水果的类别有:苹果,梨子,香蕉,我们需要获取水果里面同时包含香蕉,苹果的信息,我们就可以使用该语法:

Limit(num)

获取我么需要的前面几行,为了不输出全部的信息行,我们可以使用这个约束条件来展示里面的特定信息


//查询年级不在2015和2017里面的学生信息,避免写多个and,显示前面10个
db.students.find({
    grade: {
        $nin: [2015, 2016, 2017]
    }
}).limit(10);

Skip()

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
//查询年级不在2015和2017里面的学生信息,避免写多个and,从第三个信息开始展示,总共显示前面10个
db.students.find({
    grade: {
        $nin: [2015, 2016, 2017]
    }
}).limit(10).skip(2);

sort()排序

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

//查询年级在2015和2017里面的学生信息,避免写多个and,同时按照他们的班级进行排序,升序
db.students.find({
    grade: {
        $in: [2015, 2016, 2017]
    }
}).sort({grade:-1});

设计查询字段和返回字段

有时候我们在里面进行查询的时候,我们发现条件过于的复杂的时候我们不能够比较有结构的写出,这个时候我们可以使用var 变量来存储我们的查询条件


// 查询身高在160以下,或者身高在170以上的学生信息
db = db.getSiblingDB('cqust');
var 查询条件 = {'grade':2019,'role':'student','major':'大数据', $or:[{'height':{$lt:160}}, {'height':{$gt:175}}] };
var 返回字段 = {};
db.students.find(查询条件, 返回字段);


// 查询大数据2019级1班和2班的学生
db = db.getSiblingDB('cqust');
var 查询条件 = {'grade':2019,'role':'student','major':'大数据', $or:[{'class':1}, {'class':2}] };
var 返回字段 = {};
db.students.find(查询条件, 返回字段);

简单插入

var mydocs = [
    {
        "lastname" : "Tan",
        "firstname" : "Guangyu",
        "role" : "teacher",
        "teacher_id" : "2019814",
        "title" : "讲师",
        "courses" : [
            { "coursename" : "nosql" },
            { "coursename" : "mysql" },
            { "coursename" : "python" },
            { "coursename" : "linux" },
            { "coursename" : "kettle" }
        ]
    },
    {
        "lastname" : "Tan",
        "firstname" : "Yi",
        "role" : "student",
        "student_id" : "2019000001",
        "grade" : "2019",
        "class" : "1",
        "score" : 80
    },
    {
        "lastname" : "Tan",
        "firstname" : "Er",
        "role" : "student",
        "student_id" : "2019000002",
        "grade" : "2019",
        "class" : "1",
        "score" : 70
    }
];

db.collection2.insert(mydocs);

总结

我们在进行查询的时候,可能会联想MySQL的查询结构,以此类推mongdb里面的查询,在mongdb里面查询,我们需要对条件进行包装,也就是字典封装,条件必然是在键值对里面,对于多元操作键对应的值,值里面是字典,操作符前面对应的$符号,后面对应条件的英文单词首字母,比如小于:less than(lt),等于:e,不等于:n,对于$or需要注意里面是数组(列表),然后里面就是键值对的形式并列,总的来说,多看,多练,最后自然也就像MySQL那样游刃有余了!

每文一语

岁月极美,在于它的流逝;春花,秋月,夏日,冬雪。时光就像落在炭火上的水珠,忽的一下就散了......

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小王-123

您觉得舒心就点一点吧~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值