mongodb 匹配度排序

mongodb文档中有子标签数组,现在要传多个标签参数进行搜索,查询出符合条件的文档并以匹配标签数量多的靠前排序,如何实现

引用 皆我百晓生 小程序回复内容作答:

要实现按照匹配标签数量多的靠前排序的查询,可以使用 MongoDB 的聚合管道来完成。下面是一种可能的实现方式:

  1. 使用 $match 运算符将文档筛选为只包含符合任意一个标签条件的文档,可以使用 $in 运算符来匹配多个标签。
{
  $match: {
    tags: { $in: [标签1, 标签2, ...] }
  }
}
  1. 使用 $addFields 运算符增加一个新的字段 matchedTagsCount 来计算匹配的标签数量。
{
  $addFields: {
    matchedTagsCount: { $size: { $setIntersection: [标签数组字段, [标签1, 标签2, ...]] } }
  }
}
  1. 使用 $sort 运算符按照 matchedTagsCount 字段进行降序排序。
{
  $sort: { matchedTagsCount: -1 }
}

完整的聚合管道如下:

[
  {
    $match: {
      tags: { $in: [标签1, 标签2, ...] }
    }
  },
  {
    $addFields: {
      matchedTagsCount: { $size: { $setIntersection: [标签数组字段, [标签1, 标签2, ...]] } }
    }
  },
  {
    $sort: { matchedTagsCount: -1 }
  }
]

您可以将上述聚合管道应用到您的 MongoDB 查询中,执行该聚合查询将会返回按照匹配标签数量多的文档靠前排序的结果。

请注意,以上是一种实现方式,根据您的具体数据模型和需求,可能需要适当调整聚合管道的内容。