You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mongo mapReduce实现同城代理人配对查询及结果去重

基于MongoDB mapReduce的同城市代理人配对实现方案

实现思路

  • 以city作为map阶段的输出key,把当前代理人的id、first名、last名作为value输出
  • reduce阶段收集同城市所有代理人的列表,双层遍历列表生成配对,仅保留agent_id更小的作为agent1,更大的作为agent2,天然避免(A,B)和(B,A)这类重复配对
  • 输出结构完全匹配要求的格式

具体代码实现

定义map函数

var map = function() {
    emit(this.city, {
        agent_id: this.agent_id,
        first: this.first,
        last: this.last
    });
};

定义reduce函数

var reduce = function(key, values) {
    var pairedAgents = [];
    // 双层遍历生成所有不重复配对
    for (var i = 0; i < values.length; i++) {
        for (var j = i + 1; j < values.length; j++) {
            // 按id大小排序赋值,避免反向重复配对
            if (values[i].agent_id < values[j].agent_id) {
                pairedAgents.push({
                    agent1_first: values[i].first,
                    agent1_last: values[i].last,
                    agent2_first: values[j].first,
                    agent2_last: values[j].last
                });
            } else {
                pairedAgents.push({
                    agent1_first: values[j].first,
                    agent1_last: values[j].last,
                    agent2_first: values[i].first,
                    agent2_last: values[i].last
                });
            }
        }
    }
    return { result: pairedAgents };
};

执行mapReduce任务

如果需要持久化存储结果到新集合,执行以下命令:

db.agents.mapReduce(
    map,
    reduce,
    { out: "city_agent_pairs" }
)

执行完成后查询结果集合即可获取数据:

db.city_agent_pairs.find()

如果仅需要临时查看结果不需要持久化,可修改out参数直接返回结果:

db.agents.mapReduce(
    map,
    reduce,
    { out: { inline: 1 } }
)

内容的提问来源于stack exchange,提问作者Christopher Samuels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:02