如何查询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
相关产品推荐
相关产品推荐

