【MongoDB】$in和$eq操作数

         在实际项目中,查询数据时,有以下两种条件我们经常会遇到:①查询参数是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/

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值