mongodb学习记录之一:基础查询
来源:互联网 发布:霍建华林心如 知乎扒皮 编辑:程序博客网 时间:2024/06/05 20:44
最近在学习mongodb,在学习的过程中,记录一下博客,以备以后查看。
今天先记录一下find查询。
在学习之前先往数据库中插入一定量的数据,这里我使用循环,插入了4096条数据,格式如下:
{"name":"李明","sex":"男","score":{"math":87,"english":65,"chinese":78}}
基础查询:
指定查询条件
空的查询条件会匹配全部的文档,例如:
>db.students.find()
会将所有的文档都查询出来。
如果我们想按照条件进行查询,指定键值对即可。整数匹配整数,布尔类型匹配布尔类型。
例如,我们要查询所有女生的信息,则:
>db.students.find({"sex":"女"})
指定返回的键
以上的查询,将返回文档中所有的键,有时候我们并不需要返回所有的键,只需要其中的某些键,我们可以指定返回的键来进行过滤:
>db.students.find({"sex":"女"},{"_id":0,"name":1,"sex":1})
这样我们就指定了返回的键中只含name和sex,_id就不显示了。
注意:_id这个键,如果不指定总是会显示,如果不想返回_id,则要显式的指定_id为0,其他键不指定则不显示
条件查询
查询条件
查询不仅能像前面那样的精确匹配,还能条件匹配。
比如范围,OR,取反等条件。
条件符说明$lt<$gt>$lte<=$gte>=例子:
1、查询数学成绩大于90的所有女同学
>db.students.find({"score.math":{"$gt":85},"sex":"女"});2、查询英语成绩在90-94的男同学
>db.students.find({"score.english":{"$gt":90,"$lt":94},"sex":"男"})
OR查询
mongoDB中有两种OR查询:$in和$or
$in用于一个键的不同值
$or用于不同键的组合
例子:1、查询数学成绩是90或者95的女生
>db.students.find({"score.math":{"$in":[90,95]},"sex":"女"})2、查询数学成绩或语文成绩满分的同学
>db.students.find({"$or":[{"score.math":100},{"score.english":100},{"score.chinese":100}]})
$not
$not是元条件句,即可用在任何其他条件之上。1、查询语文成绩不大于55的学生
>db.students.find({"score.chinese":{"$not":{"$gt":55}}})
其实$not的更强大之处是配合正则。正则以后会慢慢学习。
特定类型的查询
null查询
null很奇怪,不仅仅会匹配本身,还能匹配“不存在”的,即可以匹配一个键值为null的文档,也可以匹配不存在这个键的文档
例如,下面一个例子:
mongo中文档结构如下:
例如,下面一个例子:
mongo中文档结构如下:
{ "_id" : 2 }{ "_id" : 3 }{ "_id" : 6, "name" : 12 }{ "_id" : 7, "name" : 14 }{ "_id" : 8, "name" : 16 }{ "_id" : 9, "name" : 18 }{ "_id" : 0, "name" : "SaRan" }{ "_id" : 1, "name" : "SaRan" }{ "_id" : 5, "book" : "war", "name" : 10 }{ "_id" : 4, "clazz" : null, "name" : "coolcao" }{ "_id" : 11, "name" : "good", "clazz" : "class4" }
想要查询clazz为null的记录,即_id为4的文档,
>db.person.find({"clazz":null})
{ "_id" : 2 }{ "_id" : 3 }{ "_id" : 6, "name" : 12 }{ "_id" : 7, "name" : 14 }{ "_id" : 8, "name" : 16 }{ "_id" : 9, "name" : 18 }{ "_id" : 0, "name" : "SaRan" }{ "_id" : 1, "name" : "SaRan" }{ "_id" : 5, "book" : "war", "name" : 10 }{ "_id" : 4, "clazz" : null, "name" : "coolcao" }
如果就想只查询出clazz为null的文档,不存在clazz键的不列出来咋办?使用$exists
>db.person.find({"clazz":{"$in":[null],"$exists":true}})因为mongo中没有等于($eq),所以只能使用$in来达到同样的效果了
正则表达式
正则表达式可以灵活的匹配字符串,mongo的find可以支持正则表达式来查询
查询所有姓“张”的同学
>db.students.find({"name":{"$regex":"张.+"}})或>db.students.find({"name":/张.+/})
这两种形式是等价的,只不过是用了两种不同的表达方式而已。
在第一种方式中,更灵活,可以添加可选的参数$options
例如,查询的姓名中不区分大小写,则可以如下面:
>db.students.find({"name":{"$regex":"tom","$options":"i"}})既可以查询到tom,也可以查询到Tom,tOm,TOM等等
$options的可选值:
- i 忽略大小写
- m 多行查找。如果内容里面不存在换行符号(例如\n)或者构造上没有(start/end),则该选项没有任何效果
- x 空白字符除了被转义的字符类中的以外完全被忽略,在未转义的字符类之外的#以及下一个换行符之间的所有字符,包括两个头,也都被忽略。
- s 圆点元字符(.)匹配所有字符,包括换行符
查询数组
数组大多数情况下可以这么理解:每一个元素都是整个键的值
例如,有一个水果的集合,结构如下:
{ "_id" : 1, "fruit" : [ "apple", "pear", "banana" ] }{ "_id" : 3, "fruit" : [ "pear", "cheey", "banana" ] }{ "_id" : 2, "fruit" : [ "apple", "orange", "banana", "pear", "cheey" ] }看下面的查询:
>db.food.find({"fruit":"apple"})
匹配的结果:
{ "_id" : 1, "fruit" : [ "apple", "pear", "banana" ] }{ "_id" : 2, "fruit" : [ "apple", "orange", "banana", "pear", "cheey" ] }
如果我们要通过多个元素匹配,那么应该用$all
$all
例如,我们要查找含有apple和orange的文档:>db.food.find({"fruit":{"$all":["apple","orange"]}})
如果要精确匹配,就要使用整个数组了
>db.food.find({"fruit":["apple","banana"]})
上面的语句能“精确”匹配:
{ "_id" : ObjectId("532c409e38c77537a4a525bc"), "fruit" : [ "apple", "banana" ] }
$size
$size可以查询指定长度的数组
>db.food.find({"fruit":{"$size":3}})
上面的例子是查询food中fruit有3个值的文档
$size并不能与其他查询子句组合(比如$gt),但是这种查询可以通过在文档中添加"size"键的方式来实现,这样每一次指定数组添加元素的时候,同时增加"size"的值。原来这样的更新:
>db.food.update({"$push":{"fruit":"strawberry"}})就会变成下面这样:
>db.food.update({"$push":{"fruit":"strawberry"},"$inc":{"size":1}})
增加的操作非常快,对性能的影响微乎其微。这样后,就可以像下面这样查询了:
>db.food.find({"size":{"$gt":3}})
0 0
- mongodb学习记录之一:基础查询
- MongoDB学习记录07-查询优化
- MongoDB学习记录03-MongoDB查询(java-driver)
- mongoDb查询记录
- mongodb慢查询记录
- mongodb学习系列之一
- MONGODB学习之一
- Mongodb基础条件查询
- mongodb基础查询
- mongodb如何记录慢查询
- NxOgre学习记录之一
- oracle学习记录之一
- android 学习记录之一
- sparkSQL学习记录之一
- MongoDB学习之一----Windows上安装MongoDB
- 学习记录之mongodb
- MongoDB学习记录
- MongoDB学习记录
- Java Bean 生成 Json格式的String
- 约书亚-摩西的好助手
- 安装Tomcat需要注意的问题
- maven学习记载
- 编译器算法 探索PE文件内幕(老)
- mongodb学习记录之一:基础查询
- ActiveX初级
- 牛顿法与拟牛顿法学习笔记(三)DFP 算法
- 约书亚—摩西的好助手
- hdu Shuffle’m up
- ant junit 高级使用
- Android dip,px,pt,sp 的区别
- Struts2 注解配置
- Android之开发性能优化