MongoDB查询命令

MongoDB查询命令1 WHERE 语句操作格式范例 RDBMS 中的类似语句等于 key value db coll find by java pretty whereby java 小于 key lt value db coll find likes lt 50 pretty wherelikes lt 50 小于或等于 key l key value key value key

1. WHERE语句

操作 格式 范例 RDBMS中的类似语句
等于 {< key>:< value>} db.coll.find({“by”:“java”}).pretty() where by = ‘java’
小于 {< key>:{
$lt:< value>}}
db.coll.find({“likes”:{$lt:50}}).pretty() where likes < 50
小于或等于 {< key>:{
$lte:< value>}}
db.coll.find({“likes”:{$lte:50}}).pretty() where likes <= 50
大于 {< key>:{
$gt:< value>}}
db.coll.find({“likes”:{$gt:50}}).pretty() where likes > 50
大于或等于 {< key>:{
$gte:< value>}}
db.coll.find({“likes”:{$gte:50}}).pretty() where likes >= 50
不等于 {< key>:{
$ne:< value>}}
db.coll.find({“likes”:{$ne:50}}).pretty() where likes != 50

2. AND条件

MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号隔开,即常规SQL的AND条件

db.coll.find({key1:value1, key2:value2}).pretty()

3. OR条件

MongoDB的OR条件语句使用了关键字$or,语法格式如下:

db.coll.find({$or: [{key1: value1}, {key2:value2}]}).pretty()

4. 条件操作符

条件操作符用于比较两个表达式并从mongoDB集合中获取数据

MongoDB中条件操作符有:

  1. 大于 – > – $gt
  2. 小于 – < – $lt
  3. 大于等于 – >= – $gte
  4. 小于等于 – <= – $lte

例:db.coll.find({likes : {$gt : 100}})

类似于SQL语句:select * from coll where likes > 100;

5. $type操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果

MongoDB中可以使用的类型如下表所示:

类型 数字 备注
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已废弃
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 12
Symbol 13
JavaScript(with scope) 14
32-bit integer 15
Timestamp 16
64-bit integer 17
Min key 18
Max key 255 Query with -1

例:如果想获取”coll”集合中title为String的数据,可以使用以下命令:

db.coll.find({"title":{$type:2}})db.coll.find({"title":{$type:'string'}})

6. limit()方法

如果需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数

语法格式:db.collection.find().limit(number)

:如果没有指定limit()方法中的参数则显示集合中的所有数据

7. skip()方法

除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数

语法格式:db.collection.find().limit(number).skip(number)

:skip()方法默认参数为0

8. sort()排序

在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1为降序排列

语法格式:db.collection.find().sort({KEY:1})

9. createIndex()索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录

MongoDB使用createIndex()方法来创建索引

注意在3.0.0版本前创建索引方法为db.collection.ensureIndex(),之后的版本使用了db.collection.createIndex()方法,ensureIndex()还能用,但只是createIndex()的别名

语法格式:db.collection.createIndex(keys,options)

语法中Key值为要创建的索引字段,1按升序创建索引,-1按降序来创建索引

createIndex()方法中也可以设置使用多个字段创建索引(关系型数据库中称作复合索引

createIndex()接收可选参数,可选参数列表如下:

参数 类型 描述
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加”background”可选参数;”background”默认值为false
unique Boolean 建立的索引是否唯一;指定为true创建唯一索引;默认值为false
name string 索引的名称;如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称
dropDups Boolean 3.0+版本已废弃;在建立唯一索引时是否删除重复记录,指定true创建唯一索引;默认值为 false
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档;默认值为false
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间
v index version 索引的版本号;默认的索引版本取决于mongod创建索引时运行的版本
weights document 索引权重值,数值在1到99999之间,表示该索引相对于其他索引字段的得分权重
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表;默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为language

10. aggregate()聚合

MongoDB中聚合aggregate()主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,有点类似sql语句中的count(*)

语法格式:db.collection.aggregate(AGGREGATE_OPERATION)

聚合一些表达式:

表达式 描述 实例
$sum 计算总和 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, num_tutorial : { s u m ∗ ∗ : ” sum : ” sum:likes”}}}])
$avg 计算平均值 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, num_tutorial : { a v g ∗ ∗ : ” avg : ” avg:likes”}}}])
$min 获取集合中所有文档对应值得最小值 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, num_tutorial : { m i n ∗ ∗ : ” min : ” min:likes”}}}])
$max 获取集合中所有文档对应值得最大值 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, num_tutorial : { m a x ∗ ∗ : ” max : ” max:likes”}}}])
$push 在结果文档中插入值到一个数组中 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, url : { p u s h ∗ ∗ : ” push: ” push:url”}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, url : { a d d T o S e t ∗ ∗ : ” addToSet : ” addToSet:url”}}}])
$first 根据资源文档的排序获取第一个文档数据 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, first_url : { f i r s t ∗ ∗ : ” first : ” first:url”}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.coll.aggregate([{
KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: …roup : {_id : “by_user”, last_url : { l a s t ∗ ∗ : ” last : ” last:url”}}}])

11. 管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理;管道操作是可以重复的

表达式:处理输入文档并输出;表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档

聚合框架中常用的几个操作:

  1. $project:修改输入文档的结构;可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档
  2. $ match:用于过滤数据,只输出符合条件的文档;$match使用MongoDB的标准查询操作
  3. $limit:用来限制MongoDB聚合管道返回的文档数
  4. $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档
  5. $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
  6. $group:将集合中的文档分组,可用于统计结果
  7. $sort:将输入文档排序后输出
  8. $geoNear:输出接近某一地理位置的有序文档

12. MongoDB监控

MongoDB中提供了mongostat和mongotop两个命令来监控MongoDB的运行情况

mongostat命令

mongostat是mongodb自带的状态检测工具,在命令行下使用;它会间隔固定时间获取mongodb的当前运行状态,并输出;如果发现数据库突然变慢或者有其他问题的话,首先考虑采用mongostat来查看mongo的状态

启动Mongod服务,进入到安装的MongoDB目录下的bin目录, 然后输入mongostat命令

在这里插入图片描述

mongotop命令

mongotop也是mongodb下的一个内置工具,mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据; mongotop提供每个集合的水平的统计数据;默认情况下,mongotop返回值的每一秒

启动Mongod服务,进入到安装的MongoDB目录下的bin目录, 然后输入mongotop命令

在这里插入图片描述

mongotop 10:10是< sleeptime>参数,可以不使用,等待的时间长度,以秒为单位,mongotop等待调用时间;默认是每一秒返回一次数据

mongotop --locks:报告每个数据库的锁的使用情况

在这里插入图片描述

输出结果字段说明:

  1. ns:包含数据库命名空间,后者结合了数据库名称和集合
  2. db:包含数据库的名称;名为. 的数据库针对全局锁定,而非特定数据库
  3. total:mongod花费的时间工作在这个命名空间提供总额
  4. read:提供了大量的时间,这mongod花费在执行读操作,在此命名空间
  5. write:提供这个命名空间进行写操作,这mongod花了大量的时间
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208783.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午10:46
下一篇 2026年3月19日 上午10:47


相关推荐

  • 安装CentOS7时,是否需要提前分区?新手必看指南,新手必看,CentOS7安装是否需要提前分区?

    安装CentOS7时,是否需要提前分区?新手必看指南,新手必看,CentOS7安装是否需要提前分区?

    2026年3月14日
    2
  • 在线编辑、在线预览、在线转换,基于wps.js + java + react / vue,无需任何插件,零安装

    基于wps.js在线编辑、在线预览、在线转换前台vue/react后台java,无需任何插件,零安装,可以直接配置完打包部署,也可直接集成项目中,或者二次开发,后续会不定期更新,有好的建议或者意见请留言。请下载demo的时候给个star,谢谢!亮点………示例地址https://ljserver.cn/wpsonline前台vuedemo下载地址点击此处下载vue-demo后台javademo下载地址点击此处下载java-demo…

    2022年4月12日
    386
  • AVX2指令集浮点乘法性能分析

    AVX2指令集浮点乘法性能分析AVX2指令集浮点乘法性能分析一、AVX2指令集介绍二、代码实现0.数据生成1.普通连乘2.AVX2指令集乘法:单精度浮点(float)3.AVX2指令集乘法:双精度浮点(double)三、性能测试测试环境计时方式测试内容进行性能测试第一次测试第二次测试四、总结个人猜测原因:一、AVX2指令集介绍AVX2是SIMD(单指令多数据流)指令集,支持在一个指令周期内同时对256位内存进行操作。包含乘法,加法,位运算等功能。下附Intel官网使用文档。Intel®IntrinsicsGuide我

    2022年5月30日
    39
  • java jce配置_java JCE 不限密钥长度解决办法

    java jce配置_java JCE 不限密钥长度解决办法()转自http://opensourceforgeeks.blogspot.com/2014/09/how-to-install-java-cryptography.html另外,在StackOverflow上也有相关讨论,并提供了反射实现代码https://stackoverflow.com/questions/25959948/local-policy-jar-and-us-export-p…

    2022年6月18日
    52
  • 压测工具Jmeter入门使用

    压测工具Jmeter入门使用一 创建一个基础的 Web 测试 1 测试内容模拟五个用户请求 2 次指定的 http 接口 并且重复 2 次 也就是总共请求有 5 2 2 20 次要构建本次内容需要用到 Jmeter 的元素 线程组 HTTP 请求 HTTP 请求默认值和图形结果 2 具体操作 2 1 创建测试计划单击左上角的新建计划按钮即可 同时可以设置测试计划的名称 注释 测试计划是一个完整测试元素的顶层容器 2 2 创建线程组线程组可以用来设置要模拟的用户数量 用户应该多久发送一次请求 以及他们应该发送

    2026年3月20日
    2
  • Go数组求和_数列求和公式

    Go数组求和_数列求和公式Go数组求和 packagemainimport”fmt”vara[5]intfuncmain(){a:=[5]int{1,3,5,7,8}varbintforindex,value:=rangea{fmt.Println(index,va…

    2022年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号