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

Mongoose如何统计每条记录tags字段与给定数组的匹配项数量

你可以通过MongoDB的集合操作符$setIntersection结合$size实现匹配得分统计,以下是完整的Mongoose聚合查询代码:

const targetTags = [1, 2, 3];

// 把这里的YourModel替换为你实际的Mongoose模型名称
YourModel.aggregate([
  // 【可选,推荐加】提前过滤完全无匹配标签的文档,提升大数量下的查询效率
  {
    $match: {
      tags: { $in: targetTags }
    }
  },
  // 计算每条记录的匹配得分
  {
    $addFields: {
      score: {
        $size: {
          $setIntersection: ["$tags", targetTags]
        }
      }
    }
  },
  // 【可选】如果没加前置过滤,可以在这里过滤掉得分为0的记录
  {
    $match: {
      score: { $gt: 0 }
    }
  },
  // 输出符合你要求的字段结构
  {
    $project: {
      _id: 0, // 不需要返回_id可以设置为0隐藏
      name: 1,
      description: 1,
      tags: 1,
      score: 1
    }
  }
])
.then(result => {
  // 处理返回结果
  console.log(result);
})
.catch(error => {
  // 异常处理
  console.error(error);
});

逻辑说明

  • $setIntersection用于计算两个数组的交集,返回同时存在于文档tags字段和你给定的targetTags数组中的元素
  • $size统计交集数组的长度,就是你需要的匹配得分
  • 不需要过滤0分记录的话,直接删除两个$match阶段即可
  • 最终返回的结构和你要求的格式完全一致

内容的提问来源于stack exchange,提问作者Mike Shiv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:48:01