关于数据的查询,我单独写了一篇blog。
基本查询数据
代码 | 含义 |
---|---|
db.t_user.find(); | 列出表中所有数据 |
db.t_user.findOne(); | 查询集合中的第一条数据 |
db.t_user.count(); | 统计表中数据总数 |
where 筛选条件
语法: db.t_user.find({筛选条件});
练习:
## 满足name是dong,的所有数据
> db.t_user.find({name:"dong"});
## 满足条件的第一行数据
> db.t_user.findOne({name:"dong"});
## 统计满足条件的行数
> db.t_user.count({name:"dong"});
指定查询显示的列(key)
之前我们的查询都是 select * from emp;
那么现在我们要这样查询 select ename , sal from emp;
语法: db.t_user.find({筛选条件} , {指定需要显示的字段:1});
说明:
1 查询结果中,只显示此列
0 查询结果中,不显示此列
1 & 0 不能混合使用
## 只显示age列
> db.t_user.findOne({name:'dong'} , {age:1})
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d1"), "age" : 12 }
## 只显示age 和 add 列
> db.t_user.findOne({name:'dong'} , {age:1,add:1})
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d1"), "age" : 12, "add" : "BJ" }
## 显示除了age 的所有其他列
> db.t_user.findOne({name:'dong'} , {age:0})
{
"_id" : ObjectId("5e6d4b346f33220fb3e090d1"),
"id" : 2,
"name" : "dong",
"add" : "BJ"
}
排序结果集
db.t_user.find({筛选条件} , {指定需要显示的字段:1}).sort({key:1 , key2:1}); -- 多列排序
说明
1 升序排序
-1 降序排序
## 按照age升序显示
> db.t_user.find().sort({age:1})
{ "_id" : ObjectId("5e6d4b346f33220fb3e090cf"), "add" : "BeiJing" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d1"), "id" : 2, "name" : "dong", "age" : 12, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d2"), "id" : 3, "name" : "dong", "age" : 13, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d3"), "id" : 4, "name" : "dong", "age" : 14, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d4"), "id" : 5, "name" : "dong", "age" : 15, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d5"), "id" : 6, "name" : "dong", "age" : 16, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d6"), "id" : 7, "name" : "dong", "age" : 17, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d7"), "id" : 8, "name" : "dong", "age" : 18, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d0"), "id" : 1, "name" : "jiang", "age" : 21, "add" : "BJ" }
## 按照age降序显示
> db.t_user.find().sort({age:-1})
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d0"), "id" : 1, "name" : "jiang", "age" : 21, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d7"), "id" : 8, "name" : "dong", "age" : 18, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d6"), "id" : 7, "name" : "dong", "age" : 17, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d5"), "id" : 6, "name" : "dong", "age" : 16, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d4"), "id" : 5, "name" : "dong", "age" : 15, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d3"), "id" : 4, "name" : "dong", "age" : 14, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d2"), "id" : 3, "name" : "dong", "age" : 13, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d1"), "id" : 2, "name" : "dong", "age" : 12, "add" : "BJ" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090cf"), "add" : "BeiJing" }
## 可以多列排序
分页查询显示
这功能有点类似于mysql的limit
db.t_user.find().sort({...}).skip(启始条数).limit(每页显示记录数);
> db.t_user.find().sort({age:1}).skip(0).limit(2);
{ "_id" : ObjectId("5e6d4b346f33220fb3e090cf"), "add" : "BeiJing" }
{ "_id" : ObjectId("5e6d4b346f33220fb3e090d1"), "id" : 2, "name" : "dong", "age" : 12, "add" : "BJ" }
模糊查询
MongoDB中没有like,只能使用正则表达式
/ / 类似 %ong%
db.t_user.find({name:/ong/});
高级查询
等值查询
- 方法1
db.t_user.find({name:"jiang"});
- 方法2 $eq
db.t_user.find({name:{$eq:"jiang"}});
多条件 and 查询
- 方法1
db.t_user.find({name:"dong" , age:18} );
- 方法2 $and
db.t_user.find({$and:[
{name:"dong"} ,
{age:18}
]} );
多条件 or 查询
db.t_user.find({$or:[
{name:"dong"},
{age:18}
]} );
非查询 $nor
查询名字不是jiang, 并且id 不是9
db.t_user.find({$nor:[
{name:"jiang"} ,
{id:9}
]
});
比较符
比较符号 | 代码 |
---|---|
> | $gt |
< | $lt |
>= | $gte |
<= | $lte |
db.t_user.find({id:{$gt:6}}); -- 年龄大于6
db.t_user.find({id:{$gt:3 , $lt:8 }}); -- 年龄在某个区间内 大于3 小于8