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

如何查询MongoDB文档字段是否匹配关键词数组中的任意字符串?

MongoDB查询:匹配关键词数组任意元素到productTitle字段

我有一个MongoDB文档,其中包含如下字段:

productTitle: "Samsung 860 Evo M.2 NVME SSD" 

同时我有一个关键词数组:

['samsung', 'm.2', '860']

请问如何编写MongoDB查询语句,当该数组中的任意关键词匹配productTitle字段的任意部分时,返回对应的文档?

方法1:用$in结合正则表达式

你可以把关键词数组转换成正则表达式数组,配合$in操作符实现匹配。这种方式会返回productTitle包含任意关键词的文档,默认区分大小写,要忽略大小写的话加i选项即可。

区分大小写查询:

db.collection.find({
  productTitle: { $in: [/samsung/, /m\.2/, /860/] }
})

不区分大小写查询:

db.collection.find({
  productTitle: { $in: [/samsung/i, /m\.2/i, /860/i] }
})

注意:正则里的.要转成\.,因为.在正则中是匹配任意字符的通配符,不转义会导致匹配错误。

方法2:用$or操作符

如果需要更灵活的控制,也可以用$or逐个指定匹配条件:

不区分大小写版本:

db.collection.find({
  $or: [
    { productTitle: /samsung/i },
    { productTitle: /m\.2/i },
    { productTitle: /860/i }
  ]
})

方法3:动态生成查询条件(适合程序调用)

如果关键词数组是动态生成的,可以在代码里循环生成正则数组,比如JavaScript示例:

const keywords = ['samsung', 'm.2', '860'];
// 转义关键词中的.,避免正则匹配异常
const regexArray = keywords.map(keyword => new RegExp(keyword.replace(/\./g, '\\.'), 'i'));

db.collection.find({ productTitle: { $in: regexArray } })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:15:01