1. 对数据库的认识

Mongodb是文档型数据库,每条数据为一个document记录,很多个文档记录组成一个集合(即:结构化数据库中的表)。数据库通过键、值来存储数据(即:字段、字段值),因为每条记录被存储在一个文档中,所以每条记录可以有不同的键,相同的键可以有不同数据类型的值,比如:age可以存储数:3,字符串:5岁。数据库的“键”的命名区分大小写、顺序,比如:name、Name是两个不同的键。

Mongodb内嵌shell脚本,支持javascript语法。db是全局变量,通过shell访问数据库的入口。

2. 常见Mongodb查询

1)>db.test.find()  //查询test集合中全部数据

2)>db.test.find({"name":"zhangsan","score":4})  //查询姓名为zhangsan、score为4的所有数据

3)>db.test.find({"name":"zhangsan"},{score:1,name:1})  //第二个参数:只显示score、name键值

4)>db.test.find({"score":{$gte:1,$lte:7}})  //$lt $ge $lte $gte 分别表示:<、>、<=、>=

5)>var start = new Date("11/07/2022")  //声明变量,赋值:2022-11-07

>db.test.find({createTime:{$lte:start}})  //按时间查询

6)>db.test.find({name:{$ne:"zhangsan"}}) //$ne 不等于

7)>db.test.find({name:{$in:["zhangsan","lisi"]}}) //$in 匹配多个值,接受数组参数

8)>db.test.find({name:{$nin:["zhangsan","lisi"]}}) //$nin 不匹配多个值,接受数组参数

9)>db.test.find({"$or":[{"name":"zhangsan"},{"score":7}]})  //$or多个键查询,接受数组参数

10)>db.test.find({"score":{"$mod":[5,2]}}) //$mod 除以5余2,接受数组参数

11)>db.test.find({"score":{"$not":{"$mod":[5,2]}}}) //$not 非

12)>db.test.find({score:{$in:[null],$exists:true}})  //$in匹配一个值时,相当于等于; null:值为null,或者无键值;$exists为true代表存在键值,值为null

13)支持正则表达式查询

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

14)数组查询

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

>db.test.find({z:{"$elemMatch":{$gt:10,$lt:20}}}) //$elemMatch每个数组元素都满足: >10且<20

15)嵌套文档查询

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

3. 游标及分页查询

>db.test.find().limit(3) //limit仅显示前N条
  >db.test.find().skip(3) //skip 跳过前N条
  >db.test.find().sort({"x":1}) //按字段正序排序;-1倒序

1)认识游标

可以循环对查询结果执行操作,不用一条一条查询再执行操作,效率高;游标10分钟内没有使用,会自动销毁。驱动程序immortal函数可设置超时不销毁。

>var cursor=db.test.find()  //定义游标-使用forEach循环
  >cursor.forEach(function(f){
    print(f.x,f.y);
    })

2)分页方法一:skip方法分页(效率不高)

>var page1 = db.test.find().limit(100)  //skip 进行分页
  >var page2=db.test.find().skip(100).limit(100) //skip 进行分页
  >var page3=db.test.find().skip(200).limit(100) //skip 进行分页

3)分页方法二:按时间倒叙排序,进行分页

>var page1 = db.cdasTest.find().sort({"createTime":-1}).limit(100)
  >while (page1.hasNext()){
    latest=page1.next();
    display=(latest)
   }
  >var page2 = db.cdasTest.find({"createTime":{$lt:latest.createTime}}).sort({"createTime":-1}).limit(100)
  >while (page2.hasNext()){
    latest=page2.next();
    display=(latest)
   }
  >var page3 = db.cdasTest.find({"createTime":{$lt:latest.createTime}}).sort({"createTime":-1}).limit(100)

4. 随机取一个文档

1)方法一:skip 随机取一个文档,效率较低

>var total=db.test.count() 
  >var random=Math.floor(Math.random()*total) 
  >db.test.skip(random).limit(1)

2)方法二:提前插入键random来存储随机数

>var cursor=db.test.find()
  >while(cursor.hasNext()){
    record = cursor.next();
    db.test.update({_id:record._id},{$set:{"random":Math.random()}})
    }
  >var result= db.test.findOne({"random":{$gt:Math.random()}})
  >if(result==null){
  result=db.test.findOne({"random":{$lt:Math.random()}})
  }

Mongodb常用查询相关推荐

  1. Mongodb常用查询语句_笔记

    目录 前言 一.Mongodb简介 二.Mongodb常用查询语句 总结 前言 工作中会使用到Mongodb数据库,这是一个非关系型数据库,所以它的一些查询语句跟sql会不太一样,一时半会不能马上写出 ...

  2. mongoDB 常用查询

    一,mongo mongoDB是一个基于分布式文件存储的数据库,C++编写,旨在为web应用提供可 拓展的高性能存储解决方案,是开源的. mongoDB将数据存储为一个文档,数据结构由key--> ...

  3. mongoDB常用查询更新删除语句

    mongo常用查询.更新.删除等语句 注意:文中的所有 collection 代表 mongo 表名称 常用条件操作符:$gt(>).$lt(<).$gte(>=).$lte(< ...

  4. MongoDB常用查询语句

    如果觉得 Mongodb 语句不太好理解,可以和 SQL 语句进行对比,学起来要容易很多. 1. 查询(find) 查询所有结果 select * from article db.article.fi ...

  5. Mongodb常用查询语句(对比SQL)

    1.查询所有记录 db.mycol.find(); -- select * from mycol; 2.查询 name = "jack" 的记录 db.mycol.find({&q ...

  6. MongoDB 常用查询语句

    数据库工具:Navicat id :1-7 createTime是字符串类型,8-13 createTime是date类型 直接贴代码: 查所有 db.getCollection("memb ...

  7. MongoDB 查询语法与常用查询语句总结

    MongoDB 常用查询语句总结 先来一波查询语句语法的基本解释: 列子: db.mycol.find({"likes": {$gt:10}, $or: [{"by&qu ...

  8. mongo执行逻辑表达式_MongoDB 常用查询操作

    MongoDB 查询操作可实现大部分关系型数据库的常用查询操作,本文对 MongoDB 常用查询进行讲解. 在进行操作讲解前,先展示当前 MongoDB 中已存在的文档,集合名称article 条件大 ...

  9. as常用固定搭配_MongoDB 常用查询操作

    MongoDB 查询操作可实现大部分关系型数据库的常用查询操作,本文对 MongoDB 常用查询进行讲解. 在阅读本文前,推荐先阅读<MongoDB 安装及文档的基本操作> 在进行操作讲解 ...

最新文章

  1. Android多线程分析之二:Thread的实现
  2. 第一章 初识Mysql
  3. 机器人学一些概念2——四元数,D-H 参数
  4. a data source instance has not been supplied for the datasource 'dataset1'. rdlc
  5. javascript --- ES6模块与CommonJS模块的差异
  6. Java乔晓松-android中调用系统拍照功能并显示拍照的图片
  7. 剪切caspase3_caspase-3
  8. apache开源项目--nutch
  9. 蓝桥杯 ADV-187 算法提高 勾股数
  10. 东南大学微型计算机期末,12级东南大学微机期中试卷
  11. xencenter服务器不显示,XenCenter 不能连接 XenServer 解决方法
  12. python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
  13. VC编程实现色彩空间XYZ与LAB相互转换
  14. 2012年2月编程语言排行榜:用图形编程的LOGO语言
  15. 给大家推荐几个查找芯片手册的网址,超级全建议收藏
  16. 计算机原理 · 全加器
  17. Linux ping 命令
  18. git 出现 Author identity unknown 问题一
  19. 绝地求生——PUBG吃鸡游戏模糊,画质很差
  20. linux学习笔记16

热门文章

  1. 蓝桥杯 算法训练 Beaver's Calculator
  2. 那些年,和女孩们同居的日子
  3. AD中对PCB的滴泪和敷铜操作
  4. 浏览器主页被2345拦截
  5. openOCD和Jlink仿真器
  6. LINUX基础知识笔记全
  7. 华为机试_HJ61 放苹果【简单】【收藏】
  8. vue 移动端和web端实现文件的点击预览 而非下载
  9. 阿里云官网购买云服务器完整版流程(图文教程)
  10. pppd详解_Linux 使用pppd和ppp程序进行3G/4G拨号