MongoDB中如何查找集合内字符串数组的最长元素?
查找MongoDB集合中数组里最长的字符串元素
针对你的Products集合,要找出所有文档的tags数组中长度最长的单个字符串元素,可以通过MongoDB的聚合管道实现:
基础方法(获取单个最长元素)
使用以下聚合查询:
db.Products.aggregate([ // 将tags数组拆分为单个文档 { $unwind: "$tags" }, // 计算每个tag的字符串长度 { $addFields: { tagLength: { $strLenCP: "$tags" } } }, // 按长度降序排序,最长的排在最前面 { $sort: { tagLength: -1 } }, // 只取第一个结果(即最长的元素) { $limit: 1 }, // 可选:只返回需要的字段,去掉冗余 { $project: { _id: 0, longestTag: "$tags", length: "$tagLength" } } ])
如果你的MongoDB版本低于3.4(不支持$strLenCP),可以用$strLenBytes替代(纯ASCII字符串下两者结果一致,注意区分字符长度与字节长度的差异)。
进阶:获取所有长度等于最大值的元素
如果存在多个长度相同的最长元素,想要全部获取,可以先找出最大长度,再匹配所有符合条件的元素:
db.Products.aggregate([ { $unwind: "$tags" }, { $addFields: { tagLength: { $strLenCP: "$tags" } } }, // 先找出最大长度,同时收集所有标签及长度 { $group: { _id: null, maxLength: { $max: "$tagLength" }, allTags: { $push: { tag: "$tags", length: "$tagLength" } } } }, // 筛选出长度等于最大值的元素 { $project: { _id: 0, longestTags: { $filter: { input: "$allTags", cond: { $eq: ["$$this.length", "$maxLength"] } } } } } ])
内容的提问来源于stack exchange,提问作者Rafael A P Nascimento
相关产品推荐
相关产品推荐

