Appearance
MongoDB中的查询和MySQL有很大的不同,MongoDB只支持单表查询,但是能够完成很复杂的查询操作,这些查询都是JSON格式的,因此和sql语句有着很大的不同。
查询函数find
javascript
db.student.find({age: 20}) // 找age=20的记录
db.student.find({age: {$gte: 20}}) // age>=20
db.student.findOne({age: {$gte: 20}}) // age>=20,返回第一条元素
上述age>=20
使用了特定的表达式来书写的,如下表所示:
序号 | 表达式 | 含义 |
---|---|---|
1 | $lt | 小于 |
2 | $gt | 大于 |
3 | $lte | 小于等于 |
4 | $gte | 大于等于 |
5 | $in | 包括 |
6 | $nin | 不包括 |
7 | $ne | 不等于 |
查询函数中的表达式
下面四种表达式要略微复杂些。
序号 | 表达式 | 意义 |
---|---|---|
1 | $all | 全部 |
2 | $not | 全部取反 |
3 | $or | 或 |
4 | $exists | 含有字段 |
javascript
db.teacher.save([
{name:"Jack",role:["班主任","年级主任","副校长"]},
{name:"Nick",role:["班主任"]},
])
// 查询同时有["班主任","年级主任"]的数据
db.teacher.find({role:{$all:["班主任","年级主任"]}})
// 查询年龄在28-30岁之间的学生
db.student.find({age:{$not:{$gte:28,$lte:30}}})
// 查询30岁以下的男学生,或者25岁以下的女学生
db.student.find({$or:[
{age:{$lt:30},sex:"男"},
{age:{$gt:25},sex:"女"}
]})
// 查询含有city字段的学生
db.student.find({city:{$exists:1}})
正则表达式
MongoDB支持正则表达式查找数据
javascript
db.student.find({name:/^李/}) // 查询姓李的同学记录
db.student.find({name:/^[a-zA-Z]{2,10}$/}) // 查询姓名是英文,且字符在2-10的同学记录
分页查找数据
javascript
db.student.find().limit(10)
db.student.find().skip(20).limit(10) // 从第20条开始,往后取10条
数据排序
sort函数可以对结果集进行排序,1代表升序,-1代表降序
javascript
db.student.find().sort({name: 1})
去重
用distinct()函数替代find()函数查找不重复的记录。
javascript
db.student.distinct("name")