如何找到最共同的朋友或追随者?

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 中使用聚合来实现此功能。

您可以使用这个聚合查询。

  1. 根据_id 查找两个用户。 (这应该 return 2 个文件)。

  2. 使用 $first 和 $last 对两个文档进行分组。 (这将合并两个文档)。

  3. 使用项目阶段求计数($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'
                ]
            }
        }
     }
    }]