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

MongoDB查询需求:筛选仅含主题无对应关键词的文档ID

解决方案

要实现这个需求,我们可以利用MongoDB的聚合框架对比topic和keywords数组中的label字段,筛选出符合条件的文档并提取id_doc列表。

聚合查询语句

db.yourCollectionName.aggregate([
  // 1. 提取topic和keywords中的label到单独数组
  {
    $project: {
      id_doc: 1,
      topicLabels: "$topic.label",
      keywordLabels: "$keywords.label"
    }
  },
  // 2. 计算topicLabels中不在keywordLabels里的元素(差集)
  {
    $addFields: {
      unmatchedTopics: {
        $setDifference: ["$topicLabels", "$keywordLabels"]
      }
    }
  },
  // 3. 筛选出差集不为空的文档(存在至少一个主题未出现在keywords中)
  {
    $match: {
      unmatchedTopics: { $ne: [] }
    }
  },
  // 4. 只保留id_doc字段
  {
    $project: {
      _id: 0,
      id_doc: 1
    }
  }
])

代码解释

  • 投影提取标签:把topic数组里的所有label提取成topicLabels数组,keywords数组里的所有label提取成keywordLabels数组,同时保留id_doc。
  • 计算标签差集:用$setDifference操作符找出仅在topicLabels中存在的主题标签,结果存入unmatchedTopics字段。
  • 筛选目标文档:只保留unmatchedTopics不为空的文档——也就是存在至少一个主题从未出现在keywords标签中的文档。
  • 输出结果:移除_id字段,仅返回id_doc,得到最终的文档ID列表。

性能优化建议

如果后续集合数据量增大,可给topic.label和keywords.label创建索引,提升数组字段的提取效率:

db.yourCollectionName.createIndex({ "topic.label": 1 })
db.yourCollectionName.createIndex({ "keywords.label": 1 })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:27:19