MongoDB如何一次性移除字段内HTML标签提取纯文本内容
MongoDB 清除字段HTML标签获取纯文本实现方案
以下两种方案都无需重复使用$project枚举字段,可一次性清除<p>、<span>、<br/>等所有HTML标签,直接得到纯文本内容:
方案1:正则替换(MongoDB 5.0及以上版本推荐)
利用$replaceAll配合HTML标签通用匹配正则,直接在原字段上完成替换,性能最优:
db.你的集合名.aggregate([ { $set: { Description: { $replaceAll: { input: "$Description", // 匹配所有<开头、>结尾的标签片段,覆盖所有常规HTML标签 find: /<[^>]+>/g, replacement: "" } } } } ])
- 如果需要将标签替换为空格避免相邻文本粘连,将
replacement参数值改为" "即可 - 替换后如果存在多余首尾空白,可以嵌套一层
$trim做处理,示例:$trim: { input: { /* 上面的$replaceAll逻辑 */ } }
方案2:自定义JS函数替换(MongoDB 4.2及以上版本兼容)
如果使用的MongoDB版本低于5.0、没有正则模式的$replaceAll支持,可以通过$function执行JS逻辑实现替换,灵活度更高:
db.你的集合名.aggregate([ { $set: { Description: { $function: { body: function(descContent) { if (!descContent) return ""; // 移除所有HTML标签后自动清除首尾空白 return descContent.replace(/<[^>]+>/g, "").trim(); }, args: ["$Description"], lang: "js" } } } } ])
注意:如果存储的HTML内容中存在不属于标签的
<、>字符(比如代码片段、数学表达式中的尖括号),上述正则可能出现误替换,这类特殊场景可以在自定义JS函数中补充更严谨的解析规则;常规富文本编辑器生成的客户描述场景下,上述方案完全可以满足需求。
针对给出的样例文档,执行上述任意一种聚合查询后,返回的Description字段值均为This will be a test description,其余字段保持原值,和预期输出完全一致。
内容的提问来源于stack exchange,提问作者Jayven Javier
相关产品推荐
相关产品推荐

