我有一个 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
,其条件如下:
我还需要在多个字段具有可行值的情况下实现优先顺序,如 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},