MongoDB Shell基本操作(四) - 高级查询

mongoose中使用 $in 和 $all 阅读详情

新建students集合并插入样本文档:

db.students.insert({Name:"S1",Age:25,Gender:"M",Class:"C1",Score:95})
db.students.insert({Name:"S2",Age:18,Gender:"M",Class:"C1",Score:85})
db.students.insert({Name:"S3",Age:18,Gender:"F",Class:"C1",Score:85})
db.students.insert({Name:"S4",Age:18,Gender:"F",Class:"C1",Score:75})
db.students.insert({Name:"S5",Age:18,Gender:"F",Class:"C2",Score:75})
db.students.insert({Name:"S6",Age:21,Gender:"M",Class:"C2",Score:100})
db.students.insert({Name:"S7",Age:21,Gender:"M",Class:"C2",Score:100})
db.students.insert({Name:"S8",Age:25,Gender:"F",Class:"C2",Score:100})
db.students.insert({Name:"S9",Age:25,Gender:"F",Class:"C2",Score:90})
db.students.insert({Name:"S10",Age:28,Gender:"F",Class:"C3",Score:90})

1、使用条件操作符

1.1 $lt和$lte

Age小于25岁的学生:

> db.students.find({"Age":{"$lt":25}})
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c2"), "Name" : "S2", "Age" : 18, "Gender" : "M", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c3"), "Name" : "S3", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c4"), "Name" : "S4", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c5"), "Name" : "S5", "Age" : 18, "Gender" : "F", "Class" : "C2", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c6"), "Name" : "S6", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c7"), "Name" : "S7", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }

Age小于等于25岁的学生:

> db.students.find({"Age":{"$lte":25}})
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c1"), "Name" : "S1", "Age" : 25, "Gender" : "M", "Class" : "C1", "Score" : 95 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c2"), "Name" : "S2", "Age" : 18, "Gender" : "M", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c3"), "Name" : "S3", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c4"), "Name" : "S4", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c5"), "Name" : "S5", "Age" : 18, "Gender" : "F", "Class" : "C2", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c6"), "Name" : "S6", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c7"), "Name" : "S7", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c8"), "Name" : "S8", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c9"), "Name" : "S9", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 90 }

1.2 $gt和$gte

Age大于25岁的学生:

> db.students.find({"Age":{"$gt":25}})
{ "_id" : ObjectId("5afc02ba8dda484c0dacf0ca"), "Name" : "S10", "Age" : 28, "Gender" : "F", "Class" : "C3", "Score" : 90 }

Age大于等于25岁的学生:

> db.students.find({"Age":{"$gte":25}})
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c1"), "Name" : "S1", "Age" : 25, "Gender" : "M", "Class" : "C1", "Score" : 95 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c8"), "Name" : "S8", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c9"), "Name" : "S9", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 90 }
{ "_id" : ObjectId("5afc02ba8dda484c0dacf0ca"), "Name" : "S10", "Age" : 28, "Gender" : "F", "Class" : "C3", "Score" : 90 }

1.3 $in和$nin

C1和C2班所有的学生:

> db.students.find({"Class":{"$in":["C1","C2"]}})
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c1"), "Name" : "S1", "Age" : 25, "Gender" : "M", "Class" : "C1", "Score" : 95 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c2"), "Name" : "S2", "Age" : 18, "Gender" : "M", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c3"), "Name" : "S3", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 85 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c4"), "Name" : "S4", "Age" : 18, "Gender" : "F", "Class" : "C1", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c5"), "Name" : "S5", "Age" : 18, "Gender" : "F", "Class" : "C2", "Score" : 75 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c6"), "Name" : "S6", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c7"), "Name" : "S7", "Age" : 21, "Gender" : "M", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c8"), "Name" : "S8", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 100 }
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c9"), "Name" : "S9", "Age" : 25, "Gender" : "F", "Class" : "C2", "Score" : 90 }

不属于C1和C2班所有的学生:

> db.students.find({"Class":{"$nin":["C1","C2"]}})
{ "_id" : ObjectId("5afc02ba8dda484c0dacf0ca"), "Name" : "S10", "Age" : 28, "Gender" : "F", "Class" : "C3", "Score" : 90 }

1.4 综合

性别是“M”或者属于“C1”或“C2”班并且年龄大于或等于25岁的所有学生:

> db.students.find({$or:[{"Gender":"M","Class":{"$in":["C1","C2"]}}],"Age":{"$gte":25}})
{ "_id" : ObjectId("5afc02b98dda484c0dacf0c1"), "Name" : "S1", "Age" : 25, "Gender" : "M", "Class" : "C1", "Score" : 95 }

2、正则表达式

添加样本文档:

db.students.insert({Name:"Student1",Age:30,Gender:"M",Class:"Biology",Score:90})
db.students.insert({Name:"Student2",Age:30,Gender:"M",Class:"Chemistry",Score:90})
db.students.insert({Name:"Test1",Age:30,Gender:"M",Class:"Chemistry",Score:90})
db.students.insert({Name:"Test2",Age:30,Gender:"M",Class:"Chemistry",Score:90})
db.students.insert({Name:"Test3",Age:30,Gender:"M",Class:"Chemistry",Score:90})

查询姓名以“St”或“Te”开头,并且其班级以“Che”开头的所有学生:

> db.students.find({"Name":/(St|Te)*/i, "Class":/(Che)/i})
{ "_id" : ObjectId("5afc076d8dda484c0dacf0cc"), "Name" : "Student2", "Age" : 30, "Gender" : "M", "Class" : "Chemistry", "Score" : 90 }
{ "_id" : ObjectId("5afc076d8dda484c0dacf0cd"), "Name" : "Test1", "Age" : 30, "Gender" : "M", "Class" : "Chemistry", "Score" : 90 }
{ "_id" : ObjectId("5afc076d8dda484c0dacf0ce"), "Name" : "Test2", "Age" : 30, "Gender" : "M", "Class" : "Chemistry", "Score" : 90 }
{ "_id" : ObjectId("5afc076e8dda484c0dacf0cf"), "Name" : "Test3", "Age" : 30, "Gender" : "M", "Class" : "Chemistry", "Score" : 90 }

查询姓名如student1、student2并且性别为男性,以及年龄大于等于25岁的学生:

> db.students.find({"Name":/student*/i,"Age":{"$gte":25},"Gender":"M"})
{ "_id" : ObjectId("5afc076d8dda484c0dacf0cb"), "Name" : "Student1", "Age" : 30, "Gender" : "M", "Class" : "Biology", "Score" : 90 }
{ "_id" : ObjectId("5afc076d8dda484c0dacf0cc"), "Name" : "Student2", "Age" : 30, "Gender" : "M", "Class" : "Chemistry", "Score" : 90 }

3、MapReduce

MapReduce是为了批量方法使用的,而非用于实时分析;

3.1 找出集合中的男同学和女同学的人数:

> var map = function() {emit(this.Gender,1);};
> var reduce = function(key, value) {return Array.sum(value);};
> db.students.mapReduce(map, reduce, {out: "mapreducecount1"})
{
        "result" : "mapreducecount1",
        "timeMillis" : 207,
        "counts" : {
                "input" : 15,
                "emit" : 15,
                "reduce" : 2,
                "output" : 2
        },
        "ok" : 1
}
> db.mapreducecount1.find()
{ "_id" : "F", "value" : 6 }
{ "_id" : "M", "value" : 9 }

3.2 找出按照班级统计的平均分:

> var map_1 = function() {emit(this.Class,this.Score);};
> var reduce_1 = function(key, value) {return Array.avg(value)};
> db.students.mapReduce(map_1, reduce_1, {out:"MR_ClassAvg_1"})
{
        "result" : "MR_ClassAvg_1",
        "timeMillis" : 49,
        "counts" : {
                "input" : 15,
                "emit" : 15,
                "reduce" : 3,
                "output" : 5
        },
        "ok" : 1
}
> db.MR_ClassAvg_1.find()
{ "_id" : "Biology", "value" : 90 }
{ "_id" : "C1", "value" : 85 }
{ "_id" : "C2", "value" : 93 }
{ "_id" : "C3", "value" : 90 }
{ "_id" : "Chemistry", "value" : 90 }

4、aggregate()  聚合框架

4.1 找出集合中的男同学和女同学的人数:

> db.students.aggregate({$group:{_id:"$Gender", totalStudent: {$sum:1}}})
{ "_id" : "F", "totalStudent" : 6 }
{ "_id" : "M", "totalStudent" : 9 }

4.2 找出按照班级统计的平均分:

> db.students.aggregate({$group:{_id:"$Class", AvgScore: {$avg: "$Score"}}})
{ "_id" : "Chemistry", "AvgScore" : 90 }
{ "_id" : "C1", "AvgScore" : 85 }
{ "_id" : "C2", "AvgScore" : 93 }
{ "_id" : "C3", "AvgScore" : 90 }
{ "_id" : "Biology", "AvgScore" : 90 }

MongoDB实战 – 用MongoDB Shell访问MongoDB数据库 MongoDB Shell用来连接和使用MongoDB,是最快捷的方式;用户可以使用Mongo Shell查询和更新数据以及执行管理操作。 Mongo Shell作为MongoDB Server安装的一部分包含在内。 阅读详情

相关推荐

MongoDB 如何在shell监控脚本中执行查询

在shell监控脚本中,通常需要以非交互的方式连接到数据库实例查询一些信息,例如MySQL的mysql -e就非常方便,但是对于MongoDB来说,并不能直接在登陆命令后加上查询命令来直接执行,例如 mongo --port 27017 "rs.status()" MongoDB shell version: 3.0.6 connecting to: 127.0.0.1:27017/rs.stat...

灯火觅阑珊 1349

mongodb中使用$in和$all的区别

在这里我启用本地的mongodb进行测试 1:先启动本地的mongodb的服务文件 2:再启动本地的mongodb 3:在这里我们使用nosql booster可视化工具进行操作 测试数据为: 需求1: 查询出包含1或者包含4的数据 db.user.find({ id : { $in : [“1”,“4”] } } ); 查询得到: 需求2: 查询出同时包含4和5的数据,这时就不能使用in...

Nodejs 9524

MongoDB Shell 命令--进阶篇

对前面一篇mongodb基础命令的扩展

TROUBLE I AM IN 4078

Mongo的基本shell操作(大全)

mongo操作命令大全

qq_53217531的博客 3708

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 119

AMEsim柱塞泵的建模学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、为什么要对柱塞泵进行仿真?二、Amesim中柱塞泵的模型1.amesim中自己的定排量五柱塞的斜盘柱塞泵2.压力、流量仿真总结 前言 最近在学习Amesim进行柱塞泵的仿真学习,顺便在这里记录我的学习过程,这是我的初衷 提示:以下是本篇文章正文内容,下面案例可供参考 一、为什么要对柱塞泵进行仿真? 柱塞泵是功能和动力学比较复杂的流体机械。而在实际实验中,往往没有条件或者需要对柱塞泵做一些优化,所以需要我们利用仿真...

innocent_cft的博客 8175

MongoDB高级查询-shell篇(2)

接上篇~~~~~   sort()    排序 这个非常实用。即sql语言中的OrderBy。   db.myCollection.find().sort( { ts : -1 } )   也可以多个字段排序   db.myCollection.find().sort( { ts : -1 ,ds : 1 } )   这里的1代表升序,-1代表降序。 经...

pangwu86的专栏 213

Halcon实战:基于图像清晰度自动筛选最佳对焦图片

本文详细介绍了如何使用Halcon实现基于图像清晰度的自动筛选最佳对焦图片技术。通过分析灰度值统计和标准差等核心指标,结合实战代码示例,帮助开发者高效处理工业检测中的对焦问题,提升自动化检测的准确性和效率。

weixin_27015733的博客 438

mongo 命令

mongo查询重复 db.all_datas4.aggregate([ { $group: { _id : '$rewriteId', count: { $sum : 1 } } }, { $match: { count: { $gt : 1} } } ]) rewriteId 为重复目标

qq_41048831的博客 154

vc formal实例

gui 方式启动命令,

weixin_45077935的博客 682

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6387

shell脚本中mongoDB查询详解

1. 基本的查询shell命令 :“find"或"findOne” findOne和 find mongoDB中查询命令是find ,基本语法如下db.collectionName.find() 上边的语句会返回这个集合中所有的document , 上边的语句中没有指定document , 默认就是 db.collectionName.find({}) 如果想要查询比如 , age是14的学...

leedh_码农 3138

uni-app - 修改默认端口,H5 项目控制台运行出来的 IP 地址的默认端口号(H5 项目运行后控制台,修改项目运行到内置浏览器默认 8080 端口号)

uni-app运行到H5修改默认端口号,uni-app如何修改默认端口,uni-app修改默认端口,uni-app本地运行修改调试已上线微信H5项目,请问在UNIAPP的H5运行调试时候的IP是否可以自己设置固定,uni-app开发环境,如何设置h5服务器的端口,uni-app如何修改默认端,uni-app修改默认端口,uni-app指定端口号,uni-app-修改H5项目控制台运行出来的IP地址的默认端口号(H5项目运行后控制台,修改项目运行到内置浏览器默认8080端口号)

🏆 前端领域优质创作者 9884

mongoDB的shell的基本操作

mongoDB的shell的基本操作   默认是以test用户操作,我们可以通过mongolocalhost:27017/admin增大权限   1.创建一个数据库   use[databaseName]   但是若什么也不做就退出的话这个空数据库会被删除   2.查看所有数据库   showdbs   3.给指定数据库添加集合并且添加记录   db

u014464526的专栏 333

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

Vue - 在纯 HTML 普通项目中实现组件化,让原生 html 项目支持引入 *.vue 组件 / 组件与组件间的互相引用等,完美解决了引入组件出现的跨域问题(保姆级详细教程,完整示例源码及插件)

html中使用vue组件,在HTML页面中引入vue组件,HTML界面利用http-vue-loader.js以组件方式引入vue文件,使用http-vue-loader引入组件出现报错,在html页面使用http-vue-loader插件引入组件报跨域错误,如何解决http-vue-loader引用组件时出现跨域问题,纯html原生web项目引入vue后如何实现组件引入,使用http-vue-loader插件控制台报错跨域,http-vue-loader跨域怎么办官方文档,html页面如何引入.vu

🏆 前端领域优质创作者 3905

MongoDB Shell

MongoDB Shell 是 MongoDB 提供的官方交互式界面,允许用户与 MongoDB 数据库进行交互、执行命令和操作数据库。MongoDB Shell 是基于 JavaScript 的,允许用户直接在命令行或者脚本中使用 JavaScript 语言来操作 MongoDB 数据库。

qq_25502783的博客 932

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《MongoDB》Mongo Shell中的基本操作-文档查询

本文主要分享的内容是如何通过find()命令进行数据查询,还有很多的操作符包括:比较操作符,逻辑操作符,字段操作符,数组操作符以及运算操作符

Oliver尹的博客 1504

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MongoDB常用查询指令及Shell用法

本文介绍了MongoDB常用查询指令及shell用法,让我们拿下它。

924

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MongoDB——Shell的基本操作及使用窍门

MongoDB自带一个JavaScript shell,可以从命令行与MongoDB实例交互。这个 shell非常有用,通过它可以执行管理操作、检査运行实例,亦或做其他尝试。这个 mongo shell对于使用MongoDB来说是至关重要的工具,本书后面也会经常使用这 个工具。 运行shell 运行mongo启动shell: $ ./mongo MongoDB shell versio...

学亮编程手记 996

MongoDB 关于MongoDB Shell的使用 (三)

在本文中,将介绍mongo shell的基本知识,以及如何使用它来管理MongoDB文档。为了使读者更容易地理解和实践概念,MongoDB shell的引入被分成了三个部分。

Noseparte的博客 1万+

MongoDB Shell命令

MongoDB Shell是MongoDB的官方交互式工具,基于JavaScript,允许用户通过命令行操作数据库。文章介绍了在macOS、Linux和Windows系统上安装MongoDB Shell的详细步骤:macOS可通过Homebrew或手动下载安装,Linux使用包管理器或手动安装,Windows则下载安装程序。安装完成后,用户可通过mongosh命令连接数据库,执行查询、插入、更新、删除等基本操作。文中提供了连接本地服务器、查看数据库、操作集合的完整示例流程,并附有官方安装文档链接。

xiaoaque的博客 935

MongoDB shell中执行查询

shell中执行查询查询集合中所有文档db.集合名.find()查询集合中第一个文档db.集合名.findOne()指定查询条件第一个参数就是指定查询条件,注意:查询文档中“键值对”中的值必须为常量查询全部文档db.集合名.find({}),如果查询文档{}中包含了多个键值对,则是AND的关系。> db.pers.find() { "_id" : 1001, "name" : "aaa", "age

VirtualAglina的专栏 1838

mongodb shell基础命令

mongodb shell命令 1.数据库基本操作 在mongodb中,使用use来创建和选择数据库,当数据库不存在时,use会创建一个新的数据库,但是这数据库并没有持久化到硬盘里面,而存在内存中,只有当用户往这个新创建的空数据库建collection才会做持久化操作。 创建和切换数据库 use 数据库名称 查看有权限查看的所有的数据库 mongodb是不对空数据库做持久化的,所以新创建的空数据库,用show指令是看不见的,必须建collection后才能看见。 show dbs show datab

qq_43203949的博客 2134

MongoDB 在windows shell环境下的基本操作和命令的使用示例(四)

接上一篇文章继续《MongoDB 在windows shell环境下的基本操作和命令的使用示例(三)》 1,集合的嵌套,在testcoll集合中添加一个嵌套集合,其它的嵌套和下面一样 db.testcoll.insert({"name":"顶级","age":22,"salares":5000,"course":["语文","数学","英语","meishu"],"parents":[{"na

dragon的专栏 768
上一篇: MongoDB Shell基本操作(三) - 索引
下一篇: 3台Linux服务器搭建可用副本集 - 主节点、副节点、仲裁者
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值