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

如何使用MongoDB Node.js聚合搜索含指定关键词的文档

MongoDB Node.js聚合查询匹配任一关键词的实现方法

现有如下文档集合:

[{"userId": "1", "text": "National security is of utmost importance"}, {"userId": "2", "text": "We must ensure a strong defense while upholding civil liberties and protecting human rights"}]

需要基于关键词数组["national", "strong defence"],通过MongoDB Node.js聚合查询筛选出text字段包含任一关键词的文档,实现方法如下:

基础实现方案

通过聚合管道的$match阶段,结合$or和正则表达式实现不区分大小写的匹配:

const keywords = ["national", "strong defence"];
const collection = db.collection('你的集合名称');

// 构建匹配阶段
const matchStage = {
  $match: {
    $or: keywords.map(keyword => ({
      text: {
        $regex: keyword,
        $options: 'i' // 启用不区分大小写匹配
      }
    }))
  }
};

// 执行聚合查询
const matchedDocs = await collection.aggregate([matchStage]).toArray();
console.log(matchedDocs);

精确短语匹配优化

如果需要匹配完整的关键词短语(避免部分匹配),同时处理关键词中的正则特殊字符,可以对正则表达式做如下调整:

// 转义正则特殊字符的工具函数
const escapeRegex = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

const keywords = ["national", "strong defence"];
const collection = db.collection('你的集合名称');

const matchStage = {
  $match: {
    $or: keywords.map(keyword => ({
      text: {
        $regex: `\\b${escapeRegex(keyword)}\\b`,
        $options: 'i'
      }
    }))
  }
};

const matchedDocs = await collection.aggregate([matchStage]).toArray();
console.log(matchedDocs);

说明

  • $options: 'i'确保匹配不区分大小写,比如能匹配到文档中的"National"和"national";
  • \\b表示单词边界,确保匹配完整的短语而非片段;
  • escapeRegex函数用于转义关键词中的正则特殊符号(如+、*等),避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:52:48