文章目录
查的形式有很多,如比较运算、逻辑运算、成员运算、取指定字段、对数组的查询、使用正则、获取数量,还有排序、分页等等。
1、 查询一个集合中所有数据
db.Students.find()
2、 比较运算
具体有=,!= (‘ n e ′ ) , > ( ′ ne') ,> (' ne′),>(′gt’) ,< (‘ l t ′ ) , > = ( ′ lt') ,>= (' lt′),>=(′gte’) ,<= (’$lte’)
2.1 等于 =
//【1】 select * from Students where name = '李麻子'
db.Students.find({"name":"李麻子"})
2.2 不等于 !=
//【2】select * from Students where name != '李麻子'
db.Students.find({"name":{"$ne":"李麻子"}})
2.3 大于 >
//【3】select * from Students where age > 15
db.Students.find({"age":{"$gt":15}})
2.4 小于 <
//【4】select * from Students where age < 15
db.Students.find({"age":{"$lt":15}})
2.5 大于等于 >=
//【5】select * from Students where age >= 15
db.Students.find({"age":{"$gte":15}})
2.6 小于等于 <=
//【6】select * from Students where age <= 15
db.Students.find({"age":{"$lte":15}})
3、 逻辑运算
MongoDB中字典内用逗号分隔多个条件是and关系,或者直接用 a n d , and, and,or,$not(与或非)。
3.1 and
//【1】select * from Students where age >15 and age <25
db.Students.find({"age":{"$gt":15,"$lt":25}})
3.2 多and
//【2】select * from Students where age >15 and age <25 and name != '张三'
db.Students.find({"age":{"$gt":15,"$lt":25},"name":{"$ne":"张三"}})
db.Students.find({"$and":[
{"age":{"$gt":15,"$lt":25}},
{"name":{"$ne":"张三"}}
]})
3.3 and、or 联合使用
$or:注意:MongoDB 1.5.3后版本可用
//【3】select * from Students where age > 15 and age <25 or name = '张三'
db.Students.find({"$or":[
{"age":{"$gt":15,"$lt":25}},
{"name":"张三"}
]})
//select * from Students where age > 15 and (name like'%唐三%' or address = '山东' )
db.Students.find({"age":{"$gt":15},"$or":[{"name":/唐三/},{"address":"山东"}]})
3.4 取余%
//【4】select * from Students where age % 2 = 1;
db.Students.find(
{"age":{"$mod":[2,1]}})
//【5】select * from Students where age % 2 != 1;
db.Students.find(
{"age":{"$not":{"$mod":[2,1]}}})
4、 成员算法
成员运算无非in和not in,MongoDB中形式为$in , $nin。
4.1 in
//【1】select * from Students where age in (18,22);
db.Students .find({"age":{"$in":[18,22]}})
4.2 not in
//【2】select * from Students where age not in (18,22);
db.Students .find({"age":{"$nin":[18,22]}})
5、 查看指定字段
//查看age=18的数据,并且只显示name和age数据,_id不显示。
db.Students.find({'age':18},{'_id':0,'name':1,'age':1})
6、 对数组的查询
6.1 查hobbies中有"读书"的人
//查hobbies中有"读书"的人
db.Students.find({"hobbies":"读书"})
6.2 查看既有"写诗"爱好又有"跳舞"爱好的人-$all
//查看既有"写诗"爱好又有"跳舞"爱好的人
db.Students.find({
"hobbies":{"$all":["写诗","跳舞"]}
})
6.3 查看第2个爱好为"旅游"的人
db.Students.find({
"hobbies.2":"旅游"
})
6.4 查看所有人的第2个到第3个爱好
7、字段是否存在-$exists
$exists 字段存在,true返回存在字段key的数据,false返回不存在字度key的数据。
查询出含有hobbies字段的文档
//true返回存在字段hobbies的数据,false返回不存在字度hobbies的数据
db.Students.find({"hobbies":{"$exists":true}})
8、排序
sort() 1代表升序、-1代表降序
8.1 升序
//select * from Students ORDER BY age
db.Students.find().sort({"age":1})
8.2 降序
//select * from StudentsORDER BY age DESC
db.Students.find().sort({"age":-1})
9、 分页
limit()方法接受一个数字参数表示取多少个document,skip()代表跳过几个document。
//前两个
db.Students.find().limit(2).skip(0)
//第三个和第四个
db.Students.find().limit(2).skip(2)
10、获取数量
//查询年龄大于15的人数
//方式一:
db.Students.count({'age':{"$gt":15}})
//方式二:
db.Students.find({'age':{"$gt":15}}).count()
11、 去重
db.Students.distinct()
//指定条件
db.Students.distinct("name",{"age":9})
12、 模糊查询
类似like,具体可参考:官方文档-$regex
12.1 某文档包含某字段的模糊查询
查出名字中所有包含有"三"字符串的数据
//【1】select * from Students where name like "%三%"
//方式一:
db.Students.find({"name":/三/})
//方式二:
//MongoDB的模糊查询可以使用 $regex 运算符通过正则表达式来进行匹配查询.
db.Students.find({"name":{"$regex":/三/}})
12.2 查询以某字段为开头的文档
查询学生名字中以"唐"开头的学生
//【1】select * from Students where name like "唐%"
//方式一
db.Students.find({"name":/^唐/})
//方式二:
db.Students.find({"name":{"$regex":/^三/}})
12.3 查询忽略大小写
//“i”忽略大小写,“m”支持多行。
//查找address字段中有Xi字符串且不区分大小写的文档。
db.Students.find({"address":{"$regex":/Xi/i}})