SpringBoot / Mongo:如何查询数组中的特定元素如果存在

问题描述

我在将mongdb驱动程序SpringData与SpringBoot结合使用时,发现查询存在问题

所以我的文档结构如下:

_id:abc,items : [
    {itemId : "mlk",count : 4},{itemId : "poi",count : 2},]

_id:def,count : 1},]

_id:ghi,items : [
    {itemId : "poi",]

我想做的是查询给定itemId和相关计数的商品的集合:

  • 如果数组中不存在itemId
  • 如果itemId存在于数组中,并且其计数为$ lt参数

示例:

输入:itemId = mlk,计数= 2

输出

_id:def,]

我知道我需要使用$ elemmatch来做到这一点,到目前为止,我是这样的:

Criteria.where("items").elemmatch("itemId").is("mlk").and("count").lt(2)

仅当数组中存在mlk时,此方法才能很好地工作,因此在我的情况下,它不会返回最后一个文档...

我尝试过这个:

Criteria countCriteria = Criteria.where("itemId").is("mlk").and("count").lt(2);
Criteria existCriteria = Criteria.where("itemId.mlk").exists(false);

Criteria finalCriteria = Criteria.where("items").elemmatch(new Criteria().orOperator(countCriteria,existCriteria)

但是最后一个查询返回了3个文档...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)