• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回MongoDB栏目

18 - 命令 - 查 - db.xx.find() - 与mysql对比

作者:

贺及楼

成为作者

更新日期:2024-12-05 10:41:12

命令 - 查 - db.xx.find()

find() 查询简介

MongoDB 的 find({},{}) 方法用于查询集合(Collection)中的文档(Document)。它接受一个查询对象来过滤文档,并返回一个迭代器,遍历所有匹配的文档。可以指定多个查询条件,支持字段匹配、范围查询等。使用时需注意查询效率,合理利用索引以优化性能。简单用法如下:

通过mongodb形式返回数据,具体命令例子为:

  1. db.collection.find(query, projection)
  2. db.xx.find(
  3. {查语句},
  4. {显示语句}
  5. )
  6. {查语句}
  7. 例子:{name:"小明"}
  8. {显示语句}
  9. 例子:{name:1,_id:0}

其中:
query 是一个文档,指定查询条件;
projection 是可选的,用来指定返回字段。

使用find语句

使用find()命令前,可以用MONGOSH来查数据,以下是单击MONGOSH的默认画面:
单击MONGOSH
单击MONGOSH,默认弹开test>,指的是进入了test数据库,需要use xx语句更换数据库
use切换数据库
可以看见已经成功切换admin数据库,使用 - 用户管理 - admin库是mongodb的用户管理数据库。
现在可以使用在MONGOSH使用find()命令了

find()命令汇总

分类 名称 语法 命令 释义
全部 所有记录 Mongo db.userInfo.find(); 注释1
全部 所有记录 Mongo db.userInfo.find({}); 注释1
全部 所有记录 MySQL select * from userInfo;
1条 第一条数据 Mongo db.userInfo.findOne();
选显示列 指定列name、age数据 Mongo db.userInfo.find({}, {name: 1, age: 1}); 注释2
选显示列 指定列name、age数据 MySQL select name, age from userInfo;
选显示列 指定列name、age且age>25 Mongo db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
选显示列 指定列name、age且age>25 MySQL select name, age from userInfo where age >25;
条件等于= age = 22的记录 Mongo db.userInfo.find({"age": 22});
条件等于= age = 22的记录 MySQL select * from userInfo where age = 22;
条件不等于 age = 22的记录 Mongo db.userInfo.find({"age": {$ne:22}});
多条件 name=zhangsan,age=22 Mongo db.userInfo.find({name: "zhangsan", age: 22});
多条件 name=zhangsan,age=22 MySQL select * from userInfo where name = "zhangsan" and age = "22";
条件大于>$gt age > 22的记录 Mongo db.userInfo.find({age: {$gt: 22}});
条件大于>$gt age > 22的记录 MySQL select * from userInfo where age >22;
条件小于<$lt age < 22的记录 Mongo db.userInfo.find({age: {$lt: 22}});
条件小于<$lt age < 22的记录 MySQL select * from userInfo where age <22;
条件大于等于>$gt age >= 25的记录 Mongo db.userInfo.find({age: {$gte: 25}});
条件大于等于>$gt age >= 25的记录 MySQL select * from userInfo where age >= 25;
条件小于等于<$lt age<=25的记录 Mongo db.userInfo.find({age: {$lte: 25}});
条件小于等于<$lt age<=25的记录 MySQL select * from userInfo where age <= 25;
多条件 age>=23并且 age<=26 Mongo db.userInfo.find({age: {$gte: 23, $lte: 26}});
列表条件 列表条件 Mongo db.users.find({city: {$in: ["New York", "Los Angeles"]}})
时间 时间 Mongo db.getCollection("A").find({ "createtime" : { "$gte" : ISODate("2021-05-28T00:00:00Z"), "$lt" : ISODate("2021-06-05T00:00:00Z") } })
包含 name中包含 mongo的数据 Mongo db.userInfo.find({name: /mongo/}); //相当于%%
包含 name中包含 mongo的数据 MySQL select * from userInfo where name like "%mongo%";
包含 name中以mongo开头的 Mongo db.userInfo.find({name: /^mongo/});
包含 name中以mongo开头的 MySQL select * from userInfo where name like "mongo%";
排序sort 按照年龄排序升序 Mongo db.userInfo.find().sort({age: 1});
排序sort 按照年龄排序降序 Mongo db.userInfo.find().sort({age: -1},{ages: 1});
限制limit 前5条数据 Mongo db.userInfo.find().limit(5);
限制limit 在5-10之间的数据 Mongo db.userInfo.find().limit(10).skip(5); 注释3
限制limit 第一条数据 Mongo db.userInfo.find().limit(1);
selecttop 前5条数据 MySQL selecttop 5 * from userInfo;
skip 10条以后的数据 Mongo db.userInfo.find().skip(10);
selecttop 10条以后的数据 MySQL select * from userInfo where id not in (selecttop 10 * from userInfo);
selecttop 第一条数据 MySQL selecttop 1 * from userInfo;
selecttop 第一条数据 MySQL selecttop 1 * from userInfo;
条数count() 某个结果集的记录条数 Mongo db.userInfo.find({age: {$gte: 25}}).count();
条数count() 某个结果集的记录条数 MySQL select count(*) from userInfo where age >= 20;
不重复distinct 不重复数据 Mongo db.userInfo.distinct("name");
不重复distinct 不重复数据 MySQL select distict name from userInfo;
or与 or与 查询 Mongo db.userInfo.find({$or: [{age: 22}, {age: 25}]});
or与 or与 查询 MySQL select * from userInfo where age = 22 or age = 25;
按照某列进行排序 Mongo db.userInfo.find({***: {$exists: true}}).count();
按照某列进行排序 MySQL select count(***) from userInfo;

注释1:
显示记录命令it
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。
注意:键入it命令不能带;但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。

注释2:
指定列name、age数据:
当然name也可以用true或false,当用ture的情况下和name:1效果一样,如果用false就是排除name,显示name以外的列信息。
_id默认显示,也可以-1不显示

注释3:
获得5-10之间的数据:
可用于分页,limit是pageSize,skip是第几页*pageSize

支持正则表达式查询命令

  1. >db.test.find({x:/zhang/i}) // i忽略大小写ignore; /为表达式的开始和结束;
  2. >db.test.find({x:/san?/i}) // ?元字符规定其前导对象必须在目标对象中连续出现零次或一次
  3. >db.test.find({x:/^zh/}) // ^匹配字符串的开始
  4. >db.test.find({x:/san$/}) // $匹配字符串的结束
  5. >db.test.find({x:/san.hang/}) // .匹配任意一个字符(除换行符)
  6. >db.test.find({x:/sanwhang/}) // w匹配字母或数字或下划线或汉字,只匹配一个字符
  7. >db.test.find({x:/sanshang/}) // s匹配任意的空白符,只匹配一个字符
  8. >db.test.find({x:/12dsaf/}) // d匹配数字,只匹配一个字符
  9. >db.test.find({x:/zhang/}) // 匹配单词的开始或结束,zhang开头(与^、$的用法相同)

数组查询命令

数据是数组的形式

  1. db.scores.insertMany( [
  2. { _id: 1, arrys_data: [ 82, 85, 88 ] },
  3. { _id: 2, arrys_data: [ 75, 88, 89 ] }
  4. ] )
  1. >db.test.find({friends:"小A"}) //查询数组键friends中含“小A”元素的文档
  2. >db.test.find({friends:{$all:["FFF","小A"]}}) //$all数组按多个元素查询(不区分顺序)
  3. >db.test.find({friends:["小明1","小A"]}) //数组查询-精确匹配,顺序和内容都必须一致
  4. >db.test.find({"friends.0":"小明1"}) //friends.0按位置查询数组元素
  5. >db.test.find({"friends":{"$size": 2}}) //$size按数组长度查询数组,不能与$gt等同时使用
  6. >db.test.find({"friends":{"$size": 5}},{"friends":{$slice:2}}) //$slice显示数组前2条(-2显示最后两条)
  7. >db.test.find({"friends":{"$size": 5}},{"friends":{$slice:[0,2]}}) //$slice显示数组若干条。0开始位置,2显示数组数量
  8. >db.test.find({arrys_data:{$gt:10,$lt:80}}) //按范围查询数组-数组z:[5,25]被查出来,因为5<20且25>10
  9. >db.test.find({arrys_data:{"$elemMatch":{$gt:10,$lt:80}}}) //$elemMatch每个数组元素都满足: >10且<20

嵌套文档查询命令

  1. >db.test.find({addr:{province:"河北省",city:"保定市"}}) //嵌套查询,精确匹配
  2. >db.test.find({"addr.province":"河北省","addr.city":"保定市"}) //嵌套查询,子文档中包含查询键就可以匹配
  3. >db.test.find({addr:{$elemMatch:{province:"河北省",city:"保定市"}}})

与或非 逻辑运算

  1. 逻辑运算主要就是三种类型: 与($and), 或($or), 非($not,$nor)
  2. 在进行逻辑运算中最简单的就是$and ,用 “,”连接就可以了
  3. 与($and) 语法:
  4. db.student.find({"age":{"$gt":33,"$lt":55}});
  5. 或($or) 语法:
  6. db.student.find({"$or":[{"age":{"$gt":12}} , {"score":{"$lt":41}}]}).pretty();
  7. $nor 针对或的求反:
  8. db.student.find({"$nor":[{"age":{"$gt":43}} , {"score":{"$lt":78}}]}).pretty();

范围查询

  1. "$in" (在范围之中), "$nin" (不在范围之中)
  2. "$in" 范例:
  3. db.student.find({"name":{"$in":["安安","梦梦"]}})
  4. "$nin" 范例:
  5. db.student.find({"name":{"$nin":["安安","梦梦"]}})

准备数据

准备数据
准备数据导入到Mongodb
可以看见id=8这里text数据空白,数据片里就没有这个text字段

空白显示
下方演示都是用这些数据
https://blog.csdn.net/ccysjy/article/details/127915483

全部所有记录db.userInfo.find();

  1. db.userInfo.find();
  2. db.userInfo.find({});
  3. db.test.find();
  4. db.test.find({});

全部所有记录
全部所有记录
2条命令效果一样,都可以把全部的数据打印出来

第一条数据db.userInfo.findOne();

  1. db.userInfo.findOne();
  2. db.test.findOne();

第一条数据
由于没有加上其他条件只,直接把第一条数据打印了出来

选显示列 指定列name、age数据 db.userInfo.find({}, {name: 1, age: 1});

  1. db.userInfo.find({}, {name: 1, age: 1});
  2. db.test.find({}, {name: 1, id: 1});

这里选显示列,在第2个{}里写,1为显示,0为不显示。
选显示列
图片可以看见只显示了2列,分别是name列、id列

选显示列指定列name、age且age>25 db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

  1. db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
  2. db.test.find({id: {$gt: 5}}, {name: 1, id: 1});

选显示列指定范围
可以看见范围是id大于5的

条件等于= db.userInfo.find({"age": 22});

  1. db.userInfo.find({"age": 22});
  2. db.test.find({"id": 3});

条件等于
只获得1条数据

条件不等于 db.userInfo.find({"age": {$ne:22}});

  1. db.userInfo.find({"age": {$ne:22}});
  2. db.test.find({"id": {$ne:3}});

条件不等于

条件不等于可以看见可以获得7条数据