如何找到最共同的朋友或追随者?
how to find most mutual friend or follower?
我有一个朋友列表,那些朋友有一个他们自己的朋友列表,我需要为我计算最共同的朋友。我正在使用 MongoDB 作为数据库。
我的用户模式
id: {
type: String,
require: true,
unique: true
},
followers: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}],
following: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}]
})
我不确定,但是否可以在 MongoDB 中使用聚合来实现此功能。
您可以使用这个聚合查询。
根据_id 查找两个用户。 (这应该 return 2 个文件)。
使用 $first 和 $last 对两个文档进行分组。 (这将合并两个文档)。
使用项目阶段求计数($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'
]
}
}
}
}]
我有一个朋友列表,那些朋友有一个他们自己的朋友列表,我需要为我计算最共同的朋友。我正在使用 MongoDB 作为数据库。
我的用户模式
id: {
type: String,
require: true,
unique: true
},
followers: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}],
following: [{
type:mongoose.Schema.ObjectId,
ref: 'User'
}]
})
我不确定,但是否可以在 MongoDB 中使用聚合来实现此功能。
您可以使用这个聚合查询。
根据_id 查找两个用户。 (这应该 return 2 个文件)。
使用 $first 和 $last 对两个文档进行分组。 (这将合并两个文档)。
使用项目阶段求计数($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' ] } } } }]