年龄字段的MongoDB复杂聚合管道

时间:2021-05-25 17:52:44

标签: python mongodb aggregation-framework pymongo

我有一个 MongoDB 集合,其中的文档可能包含零个或多个以下字段:DOB(出生日期)、YOB(出生年份)和 Age。它们可能包含整数、浮点数或字符串,并且它们可能映射到实际值,也可能不映射。例如:

{'_id': id1, 'Age': 25},
{'_id': id2, 'Age': 'unknown', 'DOB': 'xxxx-xx-xx'},
{'_id': id3, 'Age': '8', 'DOB': '1988/01/05'},
{'_id': id4, 'YOB': '1995.0'},
{'_id': id5, 'DOB': '5/8/1886'},
{'_id': id6, 'Age': 17, 'YOB': 2003},
{'_id': id7},
...

对于数据库中的每个文档,我需要提取单个标准化字段 Age_Standardized,其条件如下:

  1. 是一个整数
  2. 是 > 12
  3. 是 <99

我还需要在多个字段具有可行值的情况下实现优先顺序,如 DOB 然后 YOB 然后 Age。

因此,例如,如果 Age = 17 但 DOB = '1900', Age_Standardized = 17 因为,即使 DOB 存在(并且优先于 Age),它也会产生在可行范围 (13-98) 之外的 Age_Standardized。

如果 YOB = '1998.0' 且 Age = '19' 则 Age_Standardized = 23,因为即使 Age 存在且可行,但 YOB 是首选且可行的。

>

我需要在一个大型集合上实现所有这些,我希望在单个 PyMongo 聚合框架中完成。在上面的例子中,输出将是:

{'_id': id1, 'Age': 25, 'Age_Standardized': 25},
{'_id': id2, 'Age': 'unknown', 'DOB': 'xxxx-xx-xx'},
{'_id': id3, 'Age': '8', 'DOB': '1988/01/05', 'Age_Standardized': 33},
{'_id': id4, 'YOB': '1995.0', 'Age_Standardized': 26},
{'_id': id5, 'DOB': '5/8/1886'},
{'_id': id6, 'Age': 17, 'YOB': 2003, 'Age_Standardized': 18},
{'_id': id7},

0 个答案:

没有答案