在实际项目中,查询数据时,有以下两种条件我们经常会遇到:①查询参数是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. 三星教父逝世!李健熙缔造的商业传奇和争议人生
  2. boost::type_erasure::dereferenceable相关的测试程序
  3. Kogito,ergo规则—第2部分:规则的全面执行模型
  4. 数据分析工具篇pyspark应用详解——Pyspark实现PCA主成分
  5. python!!!!惊了,这世上居然还有这么神奇的东西存在
  6. 项目管理思考——我适合做项目经理吗
  7. [Android]安装 Android Studio 第一行Android代码
  8. 图论:柯尼斯堡桥问题、艾科西亚游戏
  9. 对10亿个数据去重java_JAVA 8 新特性
  10. 如何使用python计算2个毫秒级字符串的计算
  11. HttpClient那些事儿
  12. Win10离线 安装.net frame3.5
  13. Win10 迅雷9精简优化设置方法
  14. 数据分析:单元3 图像的手绘效果实现
  15. 正确地使用“respectively“
  16. java开发专用英语,JAVA开发常用英语词汇
  17. 将windows里的内容直接复制粘贴到ubuntu,提高效率
  18. 绘王DWH69智能数位板,你听说了吗?
  19. 你对MySQL中的索引了解多少?
  20. linux+ros2 launch文件开机自启动

热门文章

  1. 如何玩转AI时代下的新零售,创新奇智新零售聚智沙龙给你答案...
  2. Spring知识总结
  3. 【Spark】RDD(Resilient Distributed Dataset)究竟是什么?
  4. PEAR教程1.Pear的介绍和安装
  5. 不知道抖音怎么赚钱?我来告诉你做短视频真实收入
  6. OpenWrt软路由空间扩容
  7. 如何用栈实现深度优先算法-C语言解决迷宫问题
  8. python github 12306 文贤平_开源的12306抢票神器,GitHub标星1.5万
  9. maya2014安装之后出现log4cplus错误修复
  10. 咸鱼Maya笔记—NURBS倒角Plus