MongoDB查语句
发布日期:2021-08-21 10:50:37 浏览次数:2 分类:技术文章

本文共 4299 字,大约阅读时间需要 14 分钟。

hot3.png

推荐两个网站:英文版本的实例及使用说明,很实用呦~~

                        https://docs.mongodb.com/manual/tutorial/query-documents/

                        https://docs.mongodb.com/manual/reference/operator/query/

使用一个工具可以连接MongoDB数据库:

104248_ZecZ_3544533.png,提供了一些简单的操作方式

废话不多说,开始几个常用的介绍:

查询部分:

1.Queries

(1)按照条件查询:

1)无条件群全表查询:

db.getCollection('userinfo').find()

相当于select * from userinfo

2)where 条件: 

db.getCollection('userinfo').find({"age":27})

相当于select * from userinfo where age='27'

3)and 条件:

db.getCollection('userinfo').find({"age":27,"name":"xing"})

相当于select * from userinfo where age='27' and name="xing"

db.getCollection('userinfo').find({},{"name":1})

相当于 select name from userinfo,如果name:0则是不显示name字段

4)limit条件:

db.getCollection('userinfo').find().limit(1)

相当于select * from userinfo limit 1

5)排序Order by 降序 dsec条件:

db.getCollection('userinfo').find().sort({_id:-1})

相当于select * from userinfo order by _id desc

按_id倒序取数据  1为正序,多个条件用,号分开如{name:1,age:-1}

6)分组Order by+排序条件:

db.getCollection('userinfo').find().sort({_id:-1}).limit(1)

相当于select * from userinfo order by _id desc limit 1(降序)

7)区间数据条数limit(a,b):

db.getCollection('userinfo').find().skip(10).limit(20)

相当于select * from userinfo limit 10,20

注意:skip用的时候,一定要注意要是数量多的话skip就会变的很慢,所有的数据库都存在此问题,可以不用skip进行分页,用最后一条记录做为条件。

8)区间值(a,b)条件:

db.getCollection('userinfo').find({"age":{"$gte":27,"$lte":50}}) 

相当于:select * from userinfo where age>=27 and age<=50

9)>条件:

$gt   >

db.getCollection('examinfo').find({'Et_id':{$gt:1}})

相当于:select * from examinfo where Et_id >1

注意:这里比较的值是int型,所以不需要带引号

示例:

10)>=条件:

$gte (>=)

db.getCollection('examinfo').find({'Et_id':{$gte:1}})

相当于:select * from examinfo where Et_id >=1

11)<条件:

$lt (<)

db.getCollection('examinfo').find({'Et_id':{$lt:1}})

相当于:select * from examinfo where Et_id <1

12)<=条件:

$lte (<=)

db.getCollection('examinfo').find({'Et_id':{$lte:1}})

相当于:select * from examinfo where Et_id <=1

13)!=条件:not equal

$ne (!=)

db.getCollection('examinfo').find({'Et_id':{$ne:1}})

相当于:select * from examinfo where Et_id !=1

14)$in 条件:

db.getCollection('userInfo').find({"_id":{"$in":[12,3,100]}}) 

[ ] 列举出查询的结果,关系为 either ... or

相当于select * from userInfo where _id in (12,3,100)

15)$nin: not in 

db.getCollection('userInfo').find({"_id":{"$nin":[12,3,100]}}) 

相当于select * from userInfo where _id not in (12,3,100)

16)$all: all 

[ ] 列举出查询的结果,关系为 both ... and,每一个条件都要符合

db.getCollection('userInfo').find({'UserType':{"$all":[{"0"},{"1"},{"2"}]}})

17)$not: 反匹配:

db.getCollection('userInfo').find({"id_num":{"$not":{"$mod":[5,1]}}})

取的是id_num mod 5 != 1 的字段,比如除了id_num=1,6,11,16等所有字段

18) or 条件:

db.getCollection('userInfo').find({"$or":[{"age":16},{"name":"xing"}]})

相当于select * from userInfo where age = 16 or name = 'xing'

19)组合查询:

查询 Start_time> '2018-01-01' and Start_time<= '2018-12-12' 的数据 

db.getCollection('examinfo').find({'Start_time':{$gt:new Date(2018,01,01),$lte:new Date(2018,12,12)}})

20)计算取模查询:

db.getCollection.find({"id_num":{"$mod":[5,1]}})

取的是id_num mod 5 = 1 的字段,如id_num=1,6,11,16

(2)判断字段是否存在:

1)字段存在:

db.getCollection('userInfo').find({ a : { $exists : true }});

// 如果存在元素a,就返回

2)字段不存在:

db.getCollection('userInfo').find({ a : { $exists : false }});

// 如果不存在元素a,就返回

(3)判断字段类型:

1)字符型string:

查询所有name字段是字符类型的 

db.getCollection('userInfo').find({name: {$type: 2}}); 

2)整型 int:

查询所有age字段是整型的 

db.getCollection('userInfo').find({age: {$type: 16}})

3) 查询null:

db.getCollection('userInfo').find({"z":null})

//返回没有z字段的所有记录

4)不区分大小写查询:

db.getCollection('userInfo').find({"name":/^joe/i})

//查找name=joe的所有记录,不区分大小写

(4)查询数组:

1)all查询:

db.getCollection('fruit').find({"fruit":{"$all":["苹果","桃子","梨"]}}) 

// fruit中必需有数组中的每一个才符合结果

2)size数组长度查询:

db.getCollection('fruit').find({"fruit":{"$size":3}}) 

// fruit数组长度为3的符合结果

3)slice偏移位置:

$slice 可以按偏移量返回记录,针对数组。

如{"$slice":10}返回前10条,{"$slice":{[23,10]}}从24条取10条

4)elemMatch:

如果对象有一个元素是数组,那么$elemMatch可以匹配数组内的元素

db.getCollection('people').find({"name.first":"joe","name.last":"schmoe"})

子查询如:{"id":34,"name":{"first":"joe","last":"schmoe"}}

db.getCollection('people').find({"comments":{"$elemMatch":{"author":"joe","score":{"$gte":5}}}})

查joe发表的5分以上的评论,注意comments为二维数组

$where 在走投无路的时候可以用,但它的效率是很低的。

(5)游标用法:

cursor.hasNext()检查是否有后续结果存在,然后用cursor.next()将其获得。

>while(cursor.hasNext()){

   var obj = cursor.next();

   //do same

}

(6)去重查询:

1)distinct去重:

db.getCollection('userinfo').distinct('name')  查指定的列,并去重

查询去重name值

 

 

转载于:https://my.oschina.net/u/3544533/blog/1797775

转载地址:https://blog.csdn.net/weixin_33716941/article/details/92391115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:实验吧-忘记密码了&天网管理系统
下一篇:留白的力量

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月06日 04时53分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

c 泛型与java泛型_C ++和Java中的“泛型”类型之间有什么区别? 2021-06-24
java 返回实体对象_java 封装返回结果实体类 返回结果以及错误信息 2021-06-24
java web 防止sql注入攻击_JavaWeb防注入知识点(一) 2021-06-24
java ssm 异常分类_SSM项目常见的异常与处理提示(一) 2021-06-24
java定义矩形类_Java定义矩形类 2021-06-24
java变量怎么变常量_Java的常量与变量是什么?怎么学习呀? 2021-06-24
java开发招聘试题_客户化开发招聘试题-Java开发.doc 2021-06-24
java jdk win10 1335_win10下安装java jdk,tomcat 2021-06-24
java list二分查找_java中的ArrayList和LinkedList的二分查找速度比 | 学步园 2021-06-24
php中的变量名称用什么表示,PHP变量,方法,类等名称中的有效字符是什么? 2021-06-24
pic32mx是什么cpu_PIC32MX单片机外设库使用(Ⅰ)- 系统时钟及I/O口基本设置 2021-06-24
用c 在mysql上存图片_C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob 2021-06-24
mysql 1045 28000_mysql报关于用户密码1045(28000),几种处理方法 (zhuan) 2021-06-24
solr比mysql的优势_Solr与Elasticsearch的优缺点比较总结和归纳 2021-06-24
华为博士招聘上机考试题目_牛客网-华为-2020届校园招聘上机考试-3 2021-06-24
python中for可以做变量名吗_Python中使用动态变量名的方法 2021-06-24
mysql 日期转换天数_MySQL 日期操作 增减天数、时间转换、时间戳 2021-06-24
java对象去重复_JAVA中List对象去除重复值的方法 2021-06-24
java bss_[转] .bss段和.data段的区别 2021-06-24
java上传图片损坏_大神求助 上传图片后 图片损坏 2021-06-24