gpt4 book ai didi

java - 如何在mongodb中获取两个用户之间的共同点

转载 作者:行者123 更新时间:2023-11-30 03:16:32 25 4
gpt4 key购买 nike

我需要统计两个用户的共同喜欢的项目。我怎样才能在 spring data mongodb 中做到这一点。

假设用户1喜欢项目a,用户2喜欢项目a,那么这些用户之间的共同项目是1。所以,这里的项目喜欢/不喜欢的结构相同,那么如何通过mongodb查询来获取该项目。

我的域名设计如下

public class UserItemHistory {

long userId;
long itemId;
int status // status will be 1 if user likes item

}

数据结构为

{
user_id:1,
item_id:2,
status:1

}

{
user_id:2,
item_id:2,
status:1

}

最佳答案

您基本上希望使用 .aggregate() 方法来构建此聚合管道。简而言之,您为普通用户提供匹配和请求具有“喜欢”状态的项目。然后,您根据“itemId”进行“分组”并计算两个用户之间的匹配数。最后,您将其过滤为所有“具有”计数“大于”1 的项目,因为这表明两个用户都存在相同的项目。

作为聚合管道,只需三个简单步骤,$match 然后 $group 进行计数,然后再次对计数值进行 $match :

  { "$match": {
"userId": { "$in": [1,2] },
"status": 1
}},
{ "$group": {
"_id": "$itemId",
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } } }

可以在 spring mongo 下使用助手编写,如下所示:

    Aggregation aggregation = newAggregation(
match(
Criteria.where("userId").in(Arrays.asList(1, 2))
.and("status").is(1)
),

group("itemId").count().as("count"),

match(Criteria.where("count").gt(1))

);

它提供了针对您选择的类或集合使用 .aggregate() 运行的管道。

关于java - 如何在mongodb中获取两个用户之间的共同点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com