java - 选择给定元素的所有唯一对 - Criteria API

标签 java spring mongodb criteria

我有一个“ session ”实体,其参数为:meetingId、catId、dogId。 可能有很多 session 的 catId 和dogId 是相同的。 我需要计算一只给定的猫见过多少只狗。换句话说,我需要计算给定猫的 session 次数,其中每次 session 都与不同的狗进行。

如何使用 springframework.data.mongodb.core.query.Criteria 实现此目的?

public long countUniqueByCatId(String catId) {
            Query query = new Query()
                    .addCriteria(Criteria.where(CAT_ID).is(catId))
                    ....
            return template.count(query, Meeting.class);

同样的问题也适用于流。

meetingsList.entrySet()
                    .stream()
                    .map { it -> it.value }
                    .filter { m -> (m.getCatId() == catId) }
                    ...
                    .count();

最佳答案

您可以尝试此代码

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = cb.createQuery(Long.class);
Root<meeting> meetings = query.from(meeting.class);

//here you can change meetings to your new catdogIds class 
cq.select(cb.countDistinct(meetings)).where(Criteria.where(CAT_ID).is(catId));
return entityManager.createQuery(cq).getSingleResult();

对于流,您可以使用.distinct(),但您应该实现 equals 方法 就像这个例子一样 https://www.journaldev.com/31860/java-stream-distinct-function

也可以创建一个包含catId和dogId的类,然后重写equals方法,当比较对象具有相同的猫和狗id时,将结果列表转换为集合,以返回true。

关于java - 选择给定元素的所有唯一对 - Criteria API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62183032/

相关文章:

java - 在 Hadoop 中使用 NullWritable 的优势

java - 在java中运行cmd-line失败

mongodb - 使用 mongoengine 连接到 MongoDB atlas 集群

mongodb - 查找数组字段不为空的 MongoDB 记录

java - JSOUP从同名的div中获取div内容

java - 不知道如何修复此错误 :"UnsatisfiedLinkError: ../j3dcore-ogl.dll: Can' t 在 AMD 64 位平台上加载 IA 32 位 .dll”

java - 如何在 http 出站网关上动态附加重试建议?

Spring 拦截器与@RepositoryRestResource 不兼容

spring - HTTP 状态 401 - 需要完全身份验证才能访问此资源

Ubuntu 14.04 上的 MongoDB 3.2 似乎无法读取/etc/mongod.conf