首页 > 解决方案 > 如何找到最多共同的朋友或追随者?

问题描述

我有一个朋友列表,这些朋友有一个他们自己的朋友列表,我需要为我计算最共同的朋友。我正在使用 MongoDB 作为数据库。

我的用户架构

    id: {
    type: String,
    require: true,
    unique: true
},
    followers: [{
        type:mongoose.Schema.ObjectId,
        ref: 'User'
    }],
    following: [{
        type:mongoose.Schema.ObjectId,
        ref: 'User'
    }]
})

我不确定,但是否可以使用 MongoDB 中的聚合来实现此功能。

标签: mongodbmongodb-querynosqlaggregation-frameworkaggregation

解决方案


您可以使用此聚合查询。

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

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

  3. 使用 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'
                ]
            }
        }
     }
    }]
    

推荐阅读