为什么先讲查询,DML最后讲呢?

在SQL中,UPDATE和DELETE后面都跟了WHERE,所以在Mongodb中,先把查询字段讲清楚,其他操作就好理解了。

INSERT INTO table() VALUES() 
SELECT * FROM table WHERE ...
UPDATE table SET ... WHERE ...
DELETE FROM table WHERE...
  1. 全文档查询
//查询
//SQL:SELECT 返回字段 FROM TABLE WHERE 查询条件
//关注查询返回字段和查询条件
//Mongo: db.集合名.find(查询条件,返回字段)
//以下三条语句,返回集合中所有内容
var 查询条件 = {} //如果为空,相当于select * from table
var 返回字段 = {}
db.mycollection.find(查询条件,返回字段)//和下面语句等价
db.mycollection.find();//语句分号结束,参数文档为空可以不写
  1. 加一个条件后查询
//select * from mydb where role=student
var 查询条件 = {"role":"student"} 
//等价于var 查询条件 = {"role":{$eq:"student"}}
var 返回字段 = {}
db.mycollection.find(查询条件,返回字段)
  1. 比较操作符
//比较操作符
//select * from mydb where score>70
var 查询条件 = {"score":70} //合法,表示score=70
var 查询条件={"score":{$eq:70}};//合法
var 查询条件 = {"score">70} //不是一个文档的合法结构{key:value}
var 查询条件 = {"score":>70}//不是一个合法的值类型 >70 = {$gt:70}
var 查询条件 = {"score":{$gt:70}}; //>70  -> {$gt:70}
var 查询条件 = {"score":{$lt:70}}; //<70  -> {$lt:70}}
var 查询条件 = {"score":{$gte:70}};//>=70 -> {$gte:70}
var 查询条件 = {"score":{$lte:70}};//<=70 -> {$lte:70}}
var 查询条件 = {"score":{$ne:70}}; //!=70 -> {$ne:70}}
//返回 mycollection 集合中所有 score 字段不等于 70 的文档
var 查询条件 = {"score":{$in:[70,80]}}; //in(70,80) -> {$in:[70,80]}
var 查询条件 = {"score":{$nin:[70,80]}}; //not in(70,80) -> {$nin:[70,80]} 除了那两条记录外的所有记录
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);
  1. 逻辑操作符 AND
//多个条件之间可以使用逻辑操作符
//查询2022级1班的同学信息
//写法一
var 查询条件 = {"grade":"2022","class":"1"};//养成习惯,所有的key打上引号
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

//写法二:使用$AND操作符 编程时可能会用到
var 查询条件1 = {"grade":"2022"};
var 查询条件2 = {"class":"1"};
var 查询条件 = {$and:[查询条件1,查询条件2]}
db.mycollection.find(查询条件,返回字段);
  1. 逻辑操作符 OR
//使用$OR操作符
//查询1班或者2班学生信息
//方式一
var 查询条件1 = {"class":"1"};
var 查询条件2 = {"class":"2"};
var 查询条件 = {$or:[查询条件1,查询条件2]}
db.mycollection.find(查询条件,返回字段);
//方式二
//也可以使用$in操作符 如果有100个班级,用in操作符更方便,直接写在数组中即可
var 查询条件 = {"class":{$in:["1","2"]}};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);
  1. 逻辑操作符 NOT
// NOT $not
//var 查询条件 = {"score":{$ne:70}}; //!=70 -> {$lt:70}}
var 查询条件 = {"score":{$lte:70}};//<=70 -> {$lte:70}}
var 查询条件 = {"score":{$not:{$gt:70}}};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);
//注意:$lte 不等价于 $not:{$gt:}
//$not是逻辑运算,不是比较运算,是对条件取反集
  1. 元素操作符 exists、type
  • 判断字段是否存在:{字段名:{$exists:true|false}}

    e x i s t s : 0 ,表示要查找 ‘ s c o r e ‘ 字段 ∗ ∗ 不存在 ∗ ∗ 的文档, exists:0,表示要查找 `score` 字段 **不存在** 的文档, exists:0,表示要查找score字段不存在的文档,exists:1表示存在的字段文档

//查询有成绩(score)的记录
var 查询条件 = {"score":{$exists:1}};//$exists:1表示存在,0表示不存在
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);

//查询成绩存在,并且成绩小于70的记录
var 查询条件1 = {"score":{$exists:1}};
var 查询条件2 = {"score":{$lt:70}}};
var 查询条件 = {$and:[查询条件1,查询条件2]};
var 返回字段 = {};
db.mycollection.find(查询条件,返回字段);
  • 查询时,type后面可以跟数字/对应的类型
//查询score是字符串类型的记录 {记录:{$type:类型编码或别名}}
var 查询条件 = {"score":{$type:2}};
//var 查询条件 = {"score":{$type:"string"}};
var 返回字段={};
db.mycollection.find(查询条件,返回字段);
  • 多个查询组合
var 查询条件1 = {"score":{$exists:1}};
var 查询条件2 = {"score":{$type:1}};
var 查询条件3 = {"score":{$gt:70}};
var 查询条件={$and:[查询条件1,查询条件2,查询条件3]};
var 返回字段={};
db.mycollection.find(查询条件,返回字段);
  • 返回字段,1显示字段,0不显示字段
var 查询条件 = {};
var 返回字段1 = {_id:0, firstname:1, lastname:1,score:1};
var 返回字段2 = {firstname:0, lastname:0,score:0};
db.mycollection.find(查询条件,返回字段2);
  1. 查询帮助
db.mycollection.help();
db.mycollection.find().help();

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部