欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mongodb的简单查询

程序员文章站 2022-05-19 12:33:07
...

     此篇文章简单的记录一下mongodb 的简单查询操作。

 

一、数据准备:

db.persons.insertMany([
    {'userId':1,name:'张三','age':20,'scores':[80,90,100],father : {name:'张三三','age':46}},
    {'userId':2,name:'李四','age':21,'scores':[80,95,98],father : {name:'李四四','age':50}},
    {'userId':3,name:null,'age':22,'scores':[20,40,90]},
    {'userId':4,'age':23,'scores':[60,80,100]},
    {'userId':5,name:'钱七','age':25,'scores':[90,95,100]}
]);

 

二、单个文档,简单文档的查询:

1、返回指定的字段 (返回name和age字段)

db.persons.find({},{name:1,age:1,_id : 0})

   注意:1、默认会返回 _id 字段,如果想不要返回,给 _id : 0 即可。

              2、find() 方法的第二个参数指定需要返回的字段,字段:1 表示返回 字段:-1 表示不返回

              3、第二个方法中不可同时出现  字段 :1 和 字段 : -1这种格式,但是  _id 可以是 -1

 

2、查询 name=22 的人员,直接使用 $eq 操作符

db.persons.find({age : 22});
db.persons.find({age:{$eq: 22}});

 

3、查找 name>22 的人员,使用 $gt 操作符

db.persons.find({age:{$gt: 22}});

 

4、查找 name>=22 的人员,使用 $gte 操作符

db.persons.find({age:{$gte: 22}});

 

5、查找 name<22 的人员,使用 $lt 操作符

db.persons.find({age:{$lt: 22}});

 

6、查找 name<=22 的人员,使用 $lte 操作符

db.persons.find({age:{$lte: 22}});

 

7、查找 name>20 && name<=22 的人员

db.persons.find({age:{$gt:20,$lte: 22}});

 

8、查找 name 不是 李四 的人员,使用 $ne 操作符

db.persons.find({name:{$ne: "李四"}})

mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
9、查询 name=张三 && age>20 的人 ,使用 $and 操作符

db.persons.find({name:"张三",age:{$gt: 20}});
db.persons.find({$and: [{name:"张三"},{age:{$gt: 20}}]})

 

10、查询 name=张三 || age>20 的人 ,使用 $or 操作符

db.persons.find({$or: [{name:"张三"},{age:{$gt: 20}}]})

 

11、查询 name不是张三&&age不是>20的人,使用 $nor 操作符,即$or的取反

db.persons.find({$nor: [{name:"张三"},{age:{$gt: 20}}]})

 

12、查找 userId > 1 and ( name='李四' or age = 23 ) 的用户,即 $and $or 操作符的混合使用

 

db.persons.find({
    userId : {$gt : 1},
    $or : [{name : '李四'},{age : 23}]
});

db.persons.find({
    $and : [{
        userId : {$gt : 1},
        $or : [{name : '李四'},{age : 23}]
    }]
});
 

13、查找 name 不是李四 的人,使用 $not 操作符

db.persons.find({name:{$not: {$eq: "李四"}}});
db.persons.find({name:{$not: /^李四$/}})

   注意:1、$not 作用在其它条件之上,用于取反操作

              2、$not 用于查找不是这个值的数据,如果某个记录中没有$not查找的字段,该记录也会出来。

              3、$not 不可作为*操作符,即find($not:{})这种形式

 

14、查找 age%5=0 的人,使用 $mod 操作符

db.persons.find({age:{$mod: [5, 0]}})

   解释:表示查询出 age 和 5进行求模,余数为0 的记录。

 

15、查询 age in (20,30,25) 的人,使用 $in 操作符

db.persons.find({age:{$in: [20,30,25]}})

mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
    注意: 官网建议,当在同一个字段上进行查询时,应该使用$in操作符,而不是 $or 操作符,即能用 $in完成就不要使用$or完成。

 

16、查询 age not in (20,30,25) 的人,使用 $nin 操作符

db.persons.find({age:{$nin: [20,30,25]}})

 

17、$all 表示键需要匹配所有的值

    * 查找 age = 20 && age = 25 的人,使用 $all 操作符

db.persons.find({age:{$all: [20,25]}})

    * 查找 scores 同时存在 80 和 90 的人,使用 $all 操作符

db.persons.find({scores:{$all: [80,90]}})

   注意:1、$all 一般用来匹配数组中的元素。

              2、$all 匹配元素必须都要存在,和数组中的元素的顺序无关。

 

18、只查询 name 字段存在 && 值不为李四的记录,使用 $exists 操作符

db.persons.find({name:{$exists: true,$nin: ["李四"]}})

 

19、匹配 name=null 的情况,默认情况下会匹配出 name 不存在的记录

   * 匹配 name=nullname不存在的情况

db.persons.find({name:null})

   * 只匹配 name=null 的记录

db.persons.find({name:{$eq: null,$exists: true}})

 

20、正则表达式的使用,查找 name like '张%' 的记录,使用正则表达式

db.persons.find({name:/^张/})

 

21、查询总共有多少人。

db.persons.find({}).count()

 

三、数组的匹配

1、单个元素的匹配,格式 {key:valie} , 比如查询 scores 中存在 80 的元素

db.persons.find({scores:80})

 

2、多个元素的匹配,格式{key:{$all:[xxx,yyy]}},比如:查询 scores 中同时存在 80和90的元素,80和90在scores中的顺序无所谓,没有影响。

db.persons.find({scores:{$all: [80,90]}})

 

3、匹配数组中第几个角标对应的值是多少,比如:查询 scores中的第二个元素 90

db.persons.find({"scores.1":90})

   注意:数组角标是从 0 开始。

 

4、查询指定长度的数组,比如:查询 scores 数组的长度 =3 的数组

db.persons.find({"scores":{$size:3}})

 

5、返回数组中的子集,使用 $slice 操作符,正数表示返回前面多少条,负数表示返回后面多少条,区间表示跳过多少条和返回多少条,如下图所示:
mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
 

6、查询数组中的某一个元素,要符合给定查询条件,使用$elemMatch。比如:查询 name=张三 scores > 90 && scores < 90,结果如下图所示:
mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
 

 四、内嵌文档的查询:

1、查询 father.name=张三三 的文档

db.persons.find({"father.name":"张三三"})

2、内嵌文档的查询,和普通的文档查询是一样的。只是内嵌文档需要 写 "xxx.yyy" 需要加上双引号。

 

五、分页查询:

db.persons.find().skip(2).limit(2)

    skip:  表示跳过多少条记录

    limit:  表示需要返回多少条记录

 

六、排序操作

db.persons.find({}).sort({age:1})

    注意:1、age : 1 表示根据 age 正序排序

               2、age : -1 表示根据 age 倒序排序

               3、如果需要多个字段排序,中间以逗号分隔即可。

 

 

  • mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
  • 大小: 52.2 KB
  • mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
  • 大小: 684.3 KB
  • mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
  • 大小: 527.6 KB
  • mongodb的简单查询
            
    
    博客分类: mongodb学习 mongodbmongodb查询mongodb数组查询mongodb嵌套文档查询 
  • 大小: 19.5 KB