【问题标题】:MongoDB find distinct by substringMongoDB通过子字符串找到不同的
【发布时间】:2021-11-09 17:57:33
【问题描述】:


我在这里搜索了 MongoDB 文档和类似问题,但一无所获,感谢任何帮助、URL、提示等。
我有一组看起来像这样的图片数据:

_id:613d39715c451ffa34ca792c
origPicFile:"C:\Users\Fadil\Pictures\2010\DSC05791.JPG"
created:"2021-09-11T18:19:13.652263"
.....
EXIF:
    ImageModel:"DSC-N2"
    EXIFDateTimeOriginal:"2010:01:15 18:27:18"

日期时间范围在 1994 年至 2021 年之间。我正在寻找所有不同年份的照片
找不到带有“substr”的“distinct”。
为了使事情进一步复杂化,我想要一个独特的 substr 加号(或或),这意味着如果 EXIF 没有 EXIFDateTimeOriginal,那么我从 origPicFilename 中获取年份。
即我正在寻找这样的东西:

if EXIF.EXIFDateTime is populated then get the distinct of:
     $substr: [ "$EXIF.EXIFDateTimeOriginal", 0, 4 ]
else give me distinct 
     $substr: [ "$origPicFile", 24, 4 ]

谢谢

【问题讨论】:

  • 您可以尝试聚合查询来获取不同的值 - 请参阅$group 阶段。此外,聚合查询支持各种运算符来使用现有数据并将其转换为您的需要 - 请参阅聚合字符串运算符,如 $substrCP
  • 是的,这就是我最终所做的,但正如您在下面的回答中看到的那样,它并不能解决整个问题。但感谢您的评论

标签: mongodb distinct substr


【解决方案1】:

我想出的最接近解决问题的方法是:

db.PICS.aggregate([
  { "$group": {"_id":  {"$substr": [ "$EXIF.EXIFDateTimeOriginal", 0, 4 ]}, "count": {"$sum":1}}},
  { "$unionWith": { "coll": "PICS", "pipeline": [ {"$group": {"_id":  {"$substr": [ "$origPicFile", 24, 4 ]}, "count": {"$sum":1}}} ] } },
  { "$group": { "_id": "$_id", "total": { "$sum": "$count" } } },
  { "$project": {"_id": 0, "Year": "$_id", "Total": "$total"}},
  {"$sort":{"Year":1}}
])

输出类似:

[{'Total': 6425, 'Year': ''},
 {'Total': 61, 'Year': '0000'},
 {'Total': 33, 'Year': '1994'},
 {'Total': 27, 'Year': '1995'},
 {'Total': 2, 'Year': '1996'},
 {'Total': 18, 'Year': '1997'},
 {'Total': 55, 'Year': '1998'},
 {'Total': 5, 'Year': '1999'}]

正如你所看到的,它并没有摆脱 0000 和空年份,添加一个“$match”阶段来做这件事是行不通的。 所以现在这已经足够好了,可以过滤代码中的 0000 和空年份。

【讨论】:

  • "...添加一个 "$match" 阶段来做那不起作用。" :您可以在最后添加一个匹配阶段来过滤不需要的年份数据.
猜你喜欢
  • 2019-11-19
  • 2015-06-13
  • 2015-02-18
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2012-08-20
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多