在实际项目中,查询数据时,有以下两种条件我们经常会遇到:①查询参数是list类型,判断某个字段(String)是不是在这个list之中。②查询参数是一个String类型,判断这个参数是不是在某个字段(list)之中。详细地:

1、$in

针对条件①,比如某页面的列表筛选条件中有个所属项目的条件,是支持多选的,那么自然到后端是list类型的ids。或者类似的场景还有一些状态的条件。此时,对应的mongo操作数是in查询,如下。

    public Pager<Topic> getTopicPageByIds(String teamId, List<String> ids, PageRequest pageRequest){return createQuery().where().in("_id", ids).eq("teamId", teamId).getPagedList(pageRequest.toPager(), clazz);}

关于$in,官方文档描述是:

The $in operator selects the documents where the value of a field equals any value in the specified array. 即,$in运算符会筛选出字段值等于指定数组中任何值的文档。

详见:https://docs.mongodb.com/manual/reference/operator/query/in/

注意:
$in的查询条件(指输入参数ids)是数组,但字段值(指表中字段)却不一定只能是数组中的值,也可以是数组。例如查询条件数组为["苹果", "西瓜"],字段值为苹果,则能匹配到该条数据(如上述例子)。但若字段值为["苹果", "梨子"],此时也能匹配到该条数据,因为苹果在["苹果", "西瓜"]之中。

2、$eq

针对条件②,比如有一个项目表,其中有个memberIds的字段,该字段用于存放参与该项目的所有成员。那么在项目列表中,我肯定只能查看到我参与的项目相关信息,而不能看到与我无关的项目。此时,对应的mongo操作数是eq查询,如下。

    public Pager<Project> getProjectPage(String key, PageRequest pageRequest, String staffId){return createQuery().where().like("name", key).eq("memberIds", staffId).getPagedList(pageRequest.toPager(), clazz);}

关于$eq,官方文档描述是:

Specifies equality condition. The $eq operator matches documents where the value of a field equals the specified value.即,指定相等条件。$eq运算符将匹配字段值等于指定值的文档。

详见:https://docs.mongodb.com/manual/reference/operator/query/eq/

【MongoDB】$in和$eq操作数相关推荐

  1. 懒人数据库 MongoDB 5.x

    MongoDB MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂 ...

  2. 关于数据库或者任何语言代码中 LT,LE,EQ,NE,GE,GT 的含义

    LT,LE,EQ,NE,GE,GT分别表示什么经常有人混淆,现如下解释: lt:less than 小于 le:less than or equal to 小于等于 eq:equal to 等于 ne ...

  3. PyTorch 笔记(08)— Tensor 比较运算(torch.gt、lt、ge、le、eq、ne、torch.topk、torch.sort、torch.max、torch.min)

    1. 常用函数 比较函数中有一些是逐元素比较,操作类似逐元素操作,还有一些类似归并操作,常用的比较函数如下表所示. 表中第一行的比较操作已经实现了运算符重载,因此可以使用 a>=b,a>b ...

  4. pushpop指令的操作数必须是字操作数_指令格式

    按指令字长度分类 指令字长:整个指令的长度,与机器字长没有固定关系.通常把指令字长 = 机器字长的指令称为单字长指令,同理还有半字长指令和双字长指令. 在一个指令系统(指令集:ARM,x86)中,若所 ...

  5. mongodb常用语句以及SpringBoot中使用mongodb

    普通查询 某个字段匹配数组内的元素数量的,假如region只有一个元素的 db.getCollection('map').find({region:{$size:1}}) 假如region只有0个元素 ...

  6. -lt -gt -ge -le -eq的意义

    脚本如下: #!/bin/bash x=0 while [ $x -lt 10 ] do echo $x x=`echo "$x+1" | bc` done 请问这里的-lt是什么 ...

  7. JVM---虚拟机栈(操作数栈)

    虚拟机栈-操作数栈 概念 操作数栈:Operand Stack 每一个独立的栈帧除了包含局部变量表以外,还包含一个后进先出的操作数栈,也可以称之为 表达式栈(Expression Stack); 操作 ...

  8. php gt lte gte,springdata jpa封装数据库关键字(EQ, LIKE, GT, LT, GTE, LTE,IN)

    数据库关键字申明,类SearchFilter: /*************************************************************************** ...

  9. EQ设置的基础知识(音乐爱好者必知)

    2019独角兽企业重金招聘Python工程师标准>>> EQ设置 0,200,1K,3K,14K分别代表了 1:低频量(决定低音多少,少了则没有低频,多了则有轰轰声) 2:中低频,( ...

最新文章

  1. 一代偶像终将老去,总有AI正在年轻
  2. 接口类抽象类 封装
  3. android底部导航栏_Kotlin实现底部导航栏
  4. ellen 纽奥良大学演讲
  5. CSS: 深入理解BFC和Margin Collapse (margin叠加或者合并外边距)
  6. 视频换脸AISWAP技术示例
  7. js 把字符串格式化成时间
  8. php变量值传递,PHP将值传递到包含文件中的变量
  9. java网络爬虫,乱码问题终于完美解决
  10. Xcode8 NSLog打印json不全解决办法
  11. 【微机原理笔记】第 4 章 - 8086 汇编语言程序设计
  12. win10下安装appium
  13. 【论文笔记】 ICRA 2021 通用无监督激光里程计 Self-supervised Learning of LiDAR Odometry for Robotic Applications
  14. Error occurred when installing package 'qcloud_cos'
  15. 【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)
  16. 回文判断 【问题描述】 回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子,判断其是否是回文。 【输入形式】 输入一个最大长度不超过50个字符的句子 【输出形式】 Yes/No
  17. Android App 退出整个应用
  18. 概率算法c 语言,c语言概率算法简介(Introduction to probabilistic algorithms for c languages).doc...
  19. 【问题解决】训练和验证准确率很高,但测试准确率很低
  20. MCU ARM 32bit LPC4357FET256 STM32L072CZU6TR PDF技术资料

热门文章

  1. 必看:刺激战场国际服最全新手教程,你想要的都有,建议收藏
  2. 大国宪制_为什么妥协是伟大的设计超级大国
  3. RDD、DataSet与DataFream
  4. [cocos2d-x学习笔记][入门基础][塔防]塔防游戏中箭塔旋转并攻击实现
  5. html 苹果xr媒体查询,运用CSS3媒体查询判断iPhoneX、iPhoneXR、iPhoneXS MAX
  6. CNN:low-level feature 和 high level feature 的理解
  7. 负载与读写分离图片服务器集群模型
  8. 树莓派siri homekit_HomeBridge 操作指南:从零开始,将你的米家设备接入 Homekit
  9. maya2022-2016 中英文官方帮助打包下载地址
  10. 输入一个字符串,判断到底有几个大写字母,小写字母,以及数字