MongoDB按子串去重实现方法:优先取EXIF年份否则取文件路径年份
解决方案
你可以通过MongoDB聚合管道实现需求,无法直接用distinct方法实现带条件计算的去重,需要通过管道分阶段处理:
- 第一步:新增计算字段,按你给出的条件规则生成每条记录对应的年份
- 第二步:对生成的年份字段分组,自动实现去重效果
具体查询代码如下:
db.你的集合名.aggregate([ { $project: { year: { $cond: { // 判断EXIF.EXIFDateTimeOriginal是否存在且非空 if: { $gt: [ { $strLenCP: { $ifNull: [ "$EXIF.EXIFDateTimeOriginal", "" ] } }, 0 ] }, then: { $substr: [ "$EXIF.EXIFDateTimeOriginal", 0, 4 ] }, else: { $substr: [ "$origPicFile", 24, 4 ] } } } } }, // 按年份分组实现去重 { $group: { _id: "$year" } }, // 可选:调整输出字段名,更符合阅读习惯 { $project: { _id: 0, year: "$_id" } } ])
注意:如果你的
origPicFile路径格式固定,上述代码的起始索引直接可用。如果你所说的「第24位」是从1开始计数的,需要把24调整为23,MongoDB字符串索引从0开始计算。
内容的提问来源于stack exchange,提问作者fadil eldin
相关产品推荐
相关产品推荐

