MongoDB 查询文档中使用$expr、$where选择器

news2024/10/6 0:37:10

之前我们介绍过使用比较选择器、逻辑选择器、元素选择器、数组选择器查询文档,如果您需要进一步了解,可以参考:

MongoDB 查询文档中使用比较选择器、逻辑选择器icon-default.png?t=N3I4https://blog.csdn.net/m1729339749/article/details/129965699MongoDB 查询文档中使用元素选择器、数组选择器icon-default.png?t=N3I4https://blog.csdn.net/m1729339749/article/details/129971708本篇,我们介绍使用$expr、$where选择器查询文档:

一、准备工作

初始化课程成绩数据

db.subjectScores.insertMany([
    { "_id": 1, "name": "张三", "subject": "eng", "score": 80 },
    { "_id": 2, "name": "李四", "subject": "eng", "score": 60 },
    { "_id": 3, "name": "王五", "subject": "eng", "score": 90 },
    { "_id": 4, "name": "张三", "subject": "math", "score": 70 },
    { "_id": 5, "name": "李四", "subject": "math", "score": 90 },
    { "_id": 6, "name": "王五", "subject": "math", "score": 50 },
    { "_id": 7, "name": "张三", "subject": "physics", "score": 80 },
    { "_id": 8, "name": "李四", "subject": "physics", "score": 60 },
    { "_id": 9, "name": "王五", "subject": "physics", "score": 70 }
])

二、使用聚合表达式查询文档($expr)

语法:

{ $expr: { <expression> } }

在查询语句中允许使用聚合表达式查询文档

如果您对聚合表达式不太了解,可以参考:

MongoDB 聚合管道的使用及聚合表达式的介绍icon-default.png?t=N3I4https://blog.csdn.net/m1729339749/article/details/130034020

例子:筛选学生的数学课程成绩

db.subjectScores.find({
    $expr: { $eq: [ "$subject", "math" ] }
})

等效于:

db.subjectScores.find({
    "subject": "math"
})

等效于:

db.subjectScores.find({
    "subject": {
        $eq: "math"
    }
})

查询的结果如下:

{ "_id" : 4, "name" : "张三", "subject" : "math", "score" : 70 }
{ "_id" : 5, "name" : "李四", "subject" : "math", "score" : 90 }
{ "_id" : 6, "name" : "王五", "subject" : "math", "score" : 50 }

三、使用js函数查询文档($where)

语法:

{ $where: <JavaScript Code> }

使用js函数查询文档

例子:筛选学生的数学课程成绩

db.subjectScores.find({
    $where: function() {
        return this.subject === "math";
    }
})

另外,我们可以在$expr中使用聚合表达式运算符$function来替代$where

db.subjectScores.find({
    $expr: {
        $function: {
            body: function(s) {
                return s === "math";
            },
            args: [ "$subject" ],
            lang: "js"
        }
    }
})

如果您对$function不太了解,可以参考:

MongoDB 聚合管道中使用自定义聚合表达式运算符($function)icon-default.png?t=N3I4https://blog.csdn.net/m1729339749/article/details/130597563查询的结果如下:

{ "_id" : 4, "name" : "张三", "subject" : "math", "score" : 70 }
{ "_id" : 5, "name" : "李四", "subject" : "math", "score" : 90 }
{ "_id" : 6, "name" : "王五", "subject" : "math", "score" : 50 }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ubuntu20.04】ROS noetic的g2o与系统g2o冲突问题

文章目录 0.问题描述1.问题原因2.解决方法2.1.方法12.1.方法2 3.成功效果 0.问题描述 \qquad 从github安装2023版本的g2o时&#xff0c;若ROS也安装了g2o&#xff0c;则会在编译时触发运行时冲突。具体表现为段错误&#xff0c;如若需要排查是否为ROS的g2o导致&#xff0c;则需…

MySQL:存储过程与函数、视图

一、学习目标 掌握如何创建存储过程掌握如何创建存储函数熟悉变量的使用方法熟悉如何定义条件和处理程序了解光标的使用方法掌握流程控制的使用掌握如何调用存储过程和函数熟悉如何查看存储过程和函数掌握修改存储过程和函数的方法熟悉如何删除存储过程和函数掌握创建存储过程…

知识推理——CNN模型总结(一)

记录一下我看过的利用CNN实现知识推理的论文。 最后修改时间&#xff1a;2023.05.12 目录 1.ConvE 1.1.解决的问题 1.2.优势 1.3.贡献与创新点 1.4.方法 1.4.1 为什么用二维卷积&#xff0c;而不是一维卷积&#xff1f; 1.4.2.ConvE具体实现 1.4.3.1-N scoring 1.5.…

TiDB x CAPCOM | 为在线游戏提供灵活、可靠、可扩展的数据库服务

通过 TiDB 连接全球极限场景和创新场景&#xff0c;是 PingCAP 长期坚持的国际化战略。目前&#xff0c;在全球已有超过 3000 家企业选择 TiDB。无论在游戏、金融、物流、互联网还是智能制造等行业&#xff0c;基于规模化 OLTP 扩容、实时 HTAP 分析等应用场景&#xff0c;Ping…

在idea工具下,使用protobuf自动生成java代码,超详细教程

新项目需要使用google protobuf 生成java代码 开始第一步&#xff0c;网上很多教程都说下载protobuf support插件&#xff0c;但是我下载了很多idea版本&#xff0c;就是找不到这个protobuf support 插件 在idea 中选择file ->settings ->plugin , 搜索protobuf,一般都…

[SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)

[SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6[SWPUCTF 2021 新生赛]ez_caesar[SWPUCTF 2021 新生赛]crypto10[SWPUCTF 2021 新生赛]pigpig[SWPUCTF 2021 新生赛]traditional NSSCTF平台&#xff1a;https://www.nssctf.cn/ PS&#xff1a;记得所有…

渤海银行有点火,李伏安有点烦

文丨新熔财经 作者丨向雪徊 5月8日&#xff0c;大连银保监局连开七份罚单&#xff0c;处罚对象为渤海银行股份有限公司大连分行及相关责任人。 大银保监罚决字〔2023〕27号显示&#xff0c;渤海银行大连分行存在五项主要违法事实&#xff1a;一是未执行统一授信&#xff1b;…

【敬伟ps教程】套索、魔棒工具、快速选择工具、选区的编辑和调整

文章目录 套索工具自由套索多边形套索磁性套索工具 魔棒工具快速选择工具选区的编辑和调整 套索工具 自由套索 套索工具的用法&#xff0c;点击鼠标左键拖动鼠标建立选区。当选区没闭合时&#xff0c;松开鼠标会自动闭合选区。套索工具灵活快速但不够准确。套索工具的选项栏是…

拥有Type-C接口的显示器上 绝大多数人都不知这么大作用

大多数的数码爱好者认识Type-C接口&#xff0c;估计都是从2015年的安卓手机开始的。 但估计不少用户不知道的是&#xff0c;电脑端的显示器上也有Type-C接口。 如果你是一个刚入门想买显示器的朋友&#xff0c;下面可以分别看看显示器最常见的几种接口的介绍&#xff0c;结合你…

Sentinel 入门使用

目录 一. Sentinel简介1.1Sentinel简介1.2 Sentinel与Hystrix的区别1.3 名词解释 二. sentinel控制台2.1 下载启动控制台2.3 客户端接入控制台2.4 Rest整合Sentinel2.5 Feign 整合Sentinel 想了解Sentinel具体的使用规则就点这里呀&#xff01;&#xff01;&#xff01; 一. Se…

FISCO BCOS v3.3.0发布,新增块内分片技术,单链性能突破10万TPS

FISCO BCOS开源社区一贯秉承开源、开放、联合共建的原则&#xff0c;致力于链接社区力量将FISCO BCOS打造成更加完美的区块链底层平台。 作为FISCO BCOS开源社区重要的发起者和推动者&#xff0c;微众区块链持续参与开源生态共建。在社区通力协作下&#xff0c;FISCO BCOS v3.…

【Linux】RK3399平台开发系列——设备树的学习笔记

学习内容 RK3399平台开发系列讲解&#xff08;设备树篇&#xff09;设备树的详解 - 视频介绍 简介 设备树&#xff08;Device Tree&#xff09;是用于描述硬件设备和系统关系的树形数据结构&#xff0c;主要用于 Linux 操作系统中的设备驱动程序。在嵌入式系统中&#xff0c…

ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍

一、ARM和X86 X86 和 ARM 都是CPU设计的一个架构。X86 用的是复杂指令集。ARM用的是精简指令集。 指令集其实就是机器码&#xff0c;机器码上是汇编&#xff0c;汇编之上是程序语言例如java、c、c#。 复杂指令集是在硬件层面上设计了很多指令&#xff0c;所以编程会简单些。 精…

ChatGLM是什么?ChatGLM和ChatGPT有什么区别?

ChatGLM是什么&#xff1f; ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练&#xff0c;它具备多领域知识、代码能力、常识推理及运用能力&#xff1b;支持与用户通过自然语言对话进行交互&#xff0c;处理多种自…

IS210WSVOH1AE直流发电机的种类 ? 直流发电机中换向器的用途

​ IS210WSVOH1AE直流发电机的种类 ? 直流发电机中换向器的用途 什么是直流发电机 通过使用直流发电机&#xff0c;我们可以发电&#xff0c;发电机 4个作用是将机械能转化为电能。直流发电机主要用于特殊应用或本地发电&#xff0c;直流发电机的运行特性非常重要&#xff0c;…

企业快递管理软件使用教程

想要分析企业快递管理软件的作用&#xff0c;首先要明白&#xff0c;企业快递管理的大致情况&#xff0c;以及面临的难题是什么&#xff1f; 随着经济的发展&#xff0c;以及快递行业的不断前行。因公寄件早已成了企业运作必不可少的环节之一&#xff0c;试问哪家企业没有寄递…

vue项目中echarts自适应问题高级解决方案

一、问题描述 1.1 页面布局 项目首页中有多个echarts图表&#xff0c;如下图所示&#xff1a; 页面布局如下&#xff1a; index页面&#xff08;绿框&#xff09;是父页面&#xff0c;父页面中包含A页面&#xff08;红框&#xff09;和B页面&#xff08;橙框&#xff09;&…

黑客是怎么练成的(自学黑客四大知识点)

前言 网学黑客技术的人越来越多了&#xff0c;不少人都不知道该怎么学&#xff0c;今天就来详细的说一说黑客是如何炼成的。 首先&#xff0c;什么是黑客&#xff1f; 黑客 &#xff1a;泛指擅长IT技术的电脑高手 黑客一词&#xff0c;源自英文Hacker&#xff0c;早期其实就…

选择排序详解(Selection sort)

本文已收录于专栏 《算法合集》 目录 一、简单释义1、算法概念2、算法目的3、算法思想 二、核心思想三、图形展示四、代码实现1、优化之前2、优化之后 五、算法描述1、问题描述2、算法过程 六、算法分析1、时间复杂度2、空间复杂度3、算法稳定性 一、简单释义 1、算法概念 选择…

Web3中文|生成式 AI 参与的未来,行业该做好哪些准备?

依照 AI 技术目前的发展态势&#xff0c; AI 可能会颠覆诸多行业的未来。 当前 AI 技术的突破让大众关注到了特定类型的 AI ——生成式 AI。生成式 AI 围绕分析、自动化和内容生成展开&#xff0c;生成内容兼具质和量。 了解生成式 AI 如何融入实用应用程序的是非常有必要的。根…