如何用MongoDB的$split和$size获取仅含单个单词的标题
嘿,这事儿不难!我来给你一步步讲清楚怎么用MongoDB的$split和$size操作符找出那些仅包含单个单词的标题。
核心逻辑
先把标题按空格拆成单词数组,再用$size获取这个数组的长度——如果长度等于1,就说明原标题只有单个单词,这正是我们要找的目标。
直接筛选符合条件的文档
如果你只需要拿到结果文档,不需要额外字段,可以在$match阶段用$expr来嵌套聚合操作符(MongoDB 3.6及以上版本支持这个用法):
db.yourCollection.aggregate([ { $match: { $expr: { $eq: [ { $size: { $split: ["$title", " "] } }, 1 ] } } } ])
带辅助字段的查询(更直观)
要是你想同时看到每个标题的单词数量,方便后续排查,可以先给文档加一个wordCount字段,再筛选数量为1的:
db.yourCollection.aggregate([ { $addFields: { wordCount: { $size: { $split: ["$title", " "] } } } }, { $match: { wordCount: 1 } } ])
处理特殊情况(含多余空格的标题)
如果你的标题里有前后空格或者连续多个空格(比如" MongoDB "或"Hello World"),直接拆分可能会得到带空字符串的数组,导致$size计数不准。这时候记得先用$trim去掉首尾空格再拆分:
db.yourCollection.aggregate([ { $match: { $expr: { $eq: [ { $size: { $split: [{ $trim: { input: "$title" } }, " "] } }, 1 ] } } } ])
再唠唠每个操作符的作用
$split: ["$title", " "]:把title字段的字符串按空格拆成数组,比如"Hello World"会变成["Hello", "World"]$size: <数组>:返回数组的元素个数,单个单词的标题拆分后长度就是1$trim: { input: "$title" }:清理字符串首尾的空格,避免多余的空元素干扰计数
内容的提问来源于stack exchange,提问作者Sampath chary
相关产品推荐
相关产品推荐

