Python Mongo凌乱的DOB字符串字段到年龄
我收集了以下文件:Python Mongo凌乱的DOB字符串字段到年龄,python,mongodb,aggregation-framework,pymongo,Python,Mongodb,Aggregation Framework,Pymongo,我收集了以下文件: {'state': 'NY', 'DOB': '2000-01-02'}, {'state': 'NY', 'DOB': '2002/03/04'}, {'state': 'NY', 'DOB': '00-00-00'}, {'state': 'NY', 'DOB': 'male'}, ... 我想要像这样的输出: {'state': 'NY', 'DOB': '2000-01-02', 'Age': 21}, {'state': 'NY', 'DOB': '2002/03
{'state': 'NY', 'DOB': '2000-01-02'},
{'state': 'NY', 'DOB': '2002/03/04'},
{'state': 'NY', 'DOB': '00-00-00'},
{'state': 'NY', 'DOB': 'male'},
...
我想要像这样的输出:
{'state': 'NY', 'DOB': '2000-01-02', 'Age': 21},
{'state': 'NY', 'DOB': '2002/03/04', 'Age': 19},
{'state': 'NY', 'DOB': '00-00-00', 'Age': None}, # or Mongo None equivalent
{'state': 'NY', 'DOB': 'male', 'Age': None}, # or Mongo None equivalent
...
我正在PyMongo中构造聚合查询,我想知道是否有一种聚合方法可以尝试将字段转换为Mongo Date对象,然后从中提取Age
,否则(如果无法提取日期),返回None。下面的外壳中有一些条件吗
def map_age(state, city)
db.aggregate([
{'$match': {
'state': state,
'DOB': {"$exists": True},
'Age': {"$exists": False}
}},
{...}
])
根据@prasad_389;的建议,您必须在
$project
或$addFields
阶段使用$dateFromString
操作符
db.collection.aggregate([
{
"$project": {
"age": {
"$dateFromString": {
dateString: "$DOB",
onError: null,
onNull: null,
}
}
}
}
])
根据@prasad_389;的建议,您必须在
$project
或$addFields
阶段使用$dateFromString
操作符
db.collection.aggregate([
{
"$project": {
"age": {
"$dateFromString": {
dateString: "$DOB",
onError: null,
onNull: null,
}
}
}
}
])
你可以试试
为dob转换和do操作创建变量$let
将字符串转换为日期,如果其有效,则替换为“无”$dateFromString
从当前日期减去转换日期$subtract
您也可以使用$$NOW
新日期()
上面用“31536000000”减去日期表示“3652460601000”$divide
对年龄数字进行舍入$round
为dob转换和do操作创建变量$let
将字符串转换为日期,如果其有效,则替换为“无”$dateFromString
从当前日期减去转换日期$subtract
您也可以使用$$NOW
新日期()
上面用“31536000000”减去日期表示“3652460601000”$divide
对年龄数字进行舍入$round
为什么不在代码中使用聚合运算符?您可以使用聚合运算符。为什么不在代码中使用聚合运算符?您可以使用聚合运算符。这是否可以适当地处理“YYYY-MM-DD”和“YYYY/MM/DD”这两种情况?是的,它可以。这会适当地处理“YYYY-MM-DD”和“YYYY/MM/DD”这两种情况吗?是的,会。我不确定这是否会产生预期的结果。。。e、 例如,返回标准值,如0.0,在这种情况下,您可以显示示例值。回答得很好。与仅使用
$dateFromString
相比,与$let
操作结合使用会对性能产生什么影响?只是好奇。提前感谢。性能将影响任何聚合运算符,而不仅仅是$let
,因此mongodb的经验法则是,您可以添加更多字段,或者可以使用所需格式处理数据库中的重复数据,但不要仅为格式化查询结果而执行更多操作。。。为了处理罕见的情况,我们可以使用这些聚合运算符…@turivishal这毕竟是可行的-您知道如何实现它,以便它实际更新集合中的所有文档吗?我不确定这是否会产生预期的结果。。。e、 例如,返回标准值,如0.0,在这种情况下,您可以显示示例值。回答得很好。与仅使用$dateFromString
相比,与$let
操作结合使用会对性能产生什么影响?只是好奇。提前感谢。性能将影响任何聚合运算符,而不仅仅是$let
,因此mongodb的经验法则是,您可以添加更多字段,或者可以使用所需格式处理数据库中的重复数据,但不要仅为格式化查询结果而执行更多操作。。。为了处理罕见的情况,我们可以使用这些聚合操作符…@turivishal这毕竟是可行的-您知道如何实现它,以便它实际更新集合中的所有文档吗?