mongodb - 如何找到最多共同的朋友或追随者?
问题描述
我有一个朋友列表,这些朋友有一个他们自己的朋友列表,我需要为我计算最共同的朋友。我正在使用 MongoDB 作为数据库。
我的用户架构
id: {
type: String,
require: true,
unique: true
},
followers: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}],
following: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}]
})
我不确定,但是否可以使用 MongoDB 中的聚合来实现此功能。
解决方案
您可以使用此聚合查询。
根据 _id 查找两个用户。(这应该返回 2 个文件)。
使用 $first 和 $last 对文档进行分组。(这将结合两个文件)。
使用 Project 阶段查找计数($setIntersection 将为您提供数组的相互元素,然后您可以计算大小)。
[{ '$match': { '_id': { '$in': [ ObjectId('60d90d5163326a4760b68ee3'), ObjectId('60d90d5dc498a4477a039d28') ] } } }, { '$group': { '_id': 0, 'set1': { '$first': '$following' }, 'set2': { '$last': '$following' } } }, { '$project': { 'mutual': { '$setIntersection': [ '$set1', '$set2' ] }, 'count': { '$size': { '$setIntersection': [ '$set1', '$set2' ] } } } }]
推荐阅读
- nutch - 运行 apache nutch webservice 时的依赖关系问题
- python - 使用python从CSV文件中删除空白单元格
- ansible - 如何在变量中获取主机别名?
- pymysql - 需要查询以在没有 WHERE 约束的情况下在一列中更改更多行
- c++ - char 数组及其指针如何在 C++ 中准确工作?
- android - 视图或视图模型是否负责将模型中的数据转换为在 UI 中呈现?
- bash - 了解如何将输入重定向到从文件构造时
- c# - 在 Linq to Sql 中使用 ExecuteCommand 与事务
- spring - Spring Cloud Config - 从 Git 读取多个属性文件
- python - 我如何将数据保存到文本文件中,主要是我在记录中写的内容