05-MongoDB数据查询
基本查询
find():查询
示例:
db.集合名称.find({条件文档})
db.sub.find()
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
findOne():查询,只返回一个
db.集合名词.findOne({条件文档})
示例:
db.sub.findOne({title:'java'})
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5.0
}
pretty():将结果格式化
db.集合名词.find({条件文档}).pretty()
示例:
db.sub.find().pretty()
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2
}
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3
}
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5
}
比较运算符
序号 | 符号 | 含义 |
---|---|---|
1 | 等于 | 默认用等于判断,没有运算符 |
2 | $lt | 小于 |
3 | $lte | 小于或者等于 |
4 | $gt | 大于 |
5 | $gte | 大于或者等于 |
6 | $ne | 不等于 |
小于:
db.sub.find({count:{$lt:3}})
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
大于等于:
db.sub.find({count:{$gte:2}})
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5.0
}
{
"_id" : ObjectId("5a9ced2aca0d48d805e47b17"),
"title" : "c",
"count" : 6.0
}
逻辑运算符、范围运算符
序号 | 逻辑运算符 | 含义 |
---|---|---|
1 | 逻辑与 | 查询时多个调价链接,无需运算符 |
2 | or | 逻辑或 |
3 | $in | 在某个范围内 |
4 | $nin | 不在某个范围内 |
示例:
逻辑与:
查询count 大于 2且课程名为sql的课程
db.sub.find({count:{$gte:2},title :"sql"})
/* 1 */
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
逻辑或$or:
查询title为linux或者为sql的课程
db.sub.find({$or:[{title:"linux"},{title:"sql"}]})
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
and和or一起使用:
名字为linux 或者sql,且count 大于1的值
db.sub.find({$or:[{title:"linux"},{title:"sql"}],count:{$gte:1}})
/* 1 */
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
/* 2 */
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
范围运算符
使用"$in","$nin"判断是否在某个范围之内:
查询count在1-2之间的课程
db.sub.find({count:{$in:[1,2,3]}})
/* 1 */
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
/* 2 */
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
正则表达式
db.stu.find({name:/^黄/}) //查询姓黄的学生
db.stu.find({name:{$regex:'^陈'}) //查询姓陈的学生
自定义查询
自定义函数
db.sub.find({
$where:function(){
return this.count>2
}
})
/* 1 */
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
/* 2 */
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5.0
}
/* 3 */
{
"_id" : ObjectId("5a9ced2aca0d48d805e47b17"),
"title" : "c",
"count" : 6.0
}
Limit
方法limit():用于读取指定数量的文档
语法:
db.集合名词.find().limit(NUMBER)
db.sub.find().limit(2)
/* 1 */
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
/* 2 */
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
Skip
方法Skip():用于跳过指定数量的文档
db.stu.find().skip(1)
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5.0
}
{
"_id" : ObjectId("5a9ced2aca0d48d805e47b17"),
"title" : "c",
"count" : 6.0
}
投影
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
如:一个文档有五个字段,需要显示只有三个,投影其中三个字段即可
语法:
db.集合名称.find({},{字段名称:1,...})
对于需要显示的字段,设置为1,不设置就是不显示,对于id列默认是显示的,如果不显示需要明确设置为0,,
db.sub.find({},{title:1,_id:0})
{
"title" : "linux"
}
{
"title" : "sql"
}
{
"title" : "java"
}
{
"title" : "c"
}
排序
使用方法sort(),用于对结果集进行排序
语法:
db.集合名词.find().sort({字段:1,..})
参数1为升序排序
参数-1为降序排序
db.sub.find().sort({count:-1})
{
"_id" : ObjectId("5a9ced2aca0d48d805e47b17"),
"title" : "c",
"count" : 6.0
}
{
"_id" : ObjectId("5a9cecd7ca0d48d805e47b16"),
"title" : "java",
"count" : 5.0
}
{
"_id" : ObjectId("5a9cecd0ca0d48d805e47b15"),
"title" : "sql",
"count" : 3.0
}
{
"_id" : ObjectId("5a9cecc9ca0d48d805e47b14"),
"title" : "linux",
"count" : 2.0
}
统计个数
语法:
db.集合名称.find({条件}).count()
也可以:
db.集合名称.count({条件})
db.sub.find().count()
4
消除重复
db.集合名称.distinct({'去重',{条件}})
db.stu.find({},{name:1,gender:1})