MongoDB的高级查询

一.find

在MongoDB中find()方法:

db.集合名称.find({文档条件});

#若find中括号里没有参数,就查询输出整个集合的信息。
#若find中括号里有参数,就根据其条件,输出筛选后的信息。

findOne()方法,返回第一个符合条件的数据。

db.集合名称.findOne();

其中若觉得输出的结果不好看,则可以使用pretty()方法,进行美化结果。

db.集合名称.find({文档条件}).pretty();

 

二.比较运算符

  • 等于:默认是等于判断,没有运算符,

  • 小于:$lt,

  • 小于等于:$lte,

  • 大于:$gt,

  • 大于等于:$gte,

  • 不等于:$ne,

#等于
db.stu.find({age:26,sex:"男"});   #其中的","代表 and! 
#小于
db.stu.find({age:{$lt:26}});
#小于等于
db.stu.find({age:{$lte:26}});
#大于
db.stu.find({age:{$gt:26}});
#大于等于
db.stu.find({age:{$gte:26}});
#不等于
db.stu.find({age:{$ne:26}});

三.范围运算符

使用"$in","$nin",可以判断在某一个范围之间。

#$in 
#可以筛选出age为18或者26的
db.stu.find({age:{$in:[18,26]}})

#$nin
#可以筛选出age不为18,26的
db.stu.find({age:{$nin:[18,26]}})

 

四.逻辑运算符

and 与 or 的使用。

#and
#选出age < 26 并且 sex为男 
db.stu.find{age:{$lt:26},sex:"男"};

#or
#选出 age > 20  或者  sex 为 男的
db.stu.find({$or:[{age:{$gt:20}},{sex:"男"}]});

五.limit与skip

limit()

用与读取指定数量的文档

db.stu.find().limit(2);
#读取两条数据。

skip()

用于跳过指定数量的文档

db.stu.find().skip(2);
#跳过两条数据,读取之后的符合条件的信息。
 

skip()与limit()也可以同时使用。

#先跳过两条数据,载选取之后的两条。
db.stu.find().skip(2).limit(2);

注意:
若数据量较大,应该先skip() ,再limit();

六.自定义查询

使用$where后面加一个函数,返回满足条件的数据。

语法格式:

$where:function(){}
#其中“{}”里面,写JavaScript语句。

例如下面的例子:

查询年龄大于等于18的学生。

db.stu.find(
    $where:function(){
        return this.age >= 18;
    }
)

 七.投影

在查询到的返回结果中,只选择必要的字段。

db.stu.find({},{字段1:1,字段2:1 .......});

参数为字段与值,值为1,则显示;若不写就不会显示。

其中:"_id"是默认显示的;若要不显示"_id",则需明确设置为0即可。

例如:

db.stu.find({},{name:1,age:1})

db.stu.find({},{_id:0,age:1,name:1});

其中不难发现,在"{ }"中,改变age与name的顺序,不会影响查询结果的原有数据排列次序。

八.排序

方法sort(),用于对集合进行排序。

参数1为升序。

参数-1为降序。

#以age的升序来排序
db.stu.find(...).sort({age:1});

#以age的降序来排序
db.stu.find(...).sort({age:1});

九.统计个数

方法count(),用于统计结果集中文档条数。

db.stu.find({条件}).count();
db.stu.count({条件});

count()为聚合函数,具体内容在下一个章节中说明。

具体使用例子:

db.stu.find({sex:"男"}).count();
与之等价的:
db.stu.count({sex:"男"});

 十.消除重复

方法distinct()对数据进行去重。

db.stu.distinct('去重字段':{条件});

例如:

去除重复的age值:

db.stu.distinct('age');

 去除age大于20的所有重复值:

db.stu.distinct('age':{age:{$gt20}})

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金鳞踏雨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值