Python 年龄字段的MongoDB复杂聚合管道
我有一个MongoDB集合,其中的文档可能包含以下零个或多个字段:Python 年龄字段的MongoDB复杂聚合管道,python,mongodb,aggregation-framework,pymongo,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
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\u standarized
,其标准如下:
Age
=17但DOB
=1900',Age\u标准化
=17,因为即使DOB存在(且优先于Age),其产生的Age\u标准化超出可行范围(13-98)
如果YOB
='1998.0'和Age
='19',则Age\u标准化
=23,因为即使年龄存在且可行,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},
年龄字段类型和DOB字段值和格式不一致,因此在查询中执行这些类型的操作不是一个好主意。我建议您更正所有字段的类型和日期格式,以标准化格式,否则您的查询将无法在大型集合中提供性能。这也是您不应将日期值存储为stings的另一个证据。始终存储正确的
日期
对象。