mongodb - MongoDB使特定字段的所有键值成为自己的字段(Python)
问题描述
我当前的收藏有以下格式的文档
{'name': 'Bob',
'school': 'UCLA',
'sport': 'Basketball'
}
{'name': 'Bob',
'school': 'UCLA',
'sport': 'Soccer'
}
{'name': 'Bob',
'school': 'UCLA',
'sport': 'Tennis'
}
...
{'name': 'Caroline',
'school': 'UCSD',
'sport': 'Basketball'
}
{'name': 'Caroline',
'school': 'UCSD',
'sport': 'Soccer'
}
{'name': 'Bob',
'school': 'UCLA',
'sport': 'Volleyball'
}
我想做的是制作sport
自己领域的所有值,但我不太确定如何实现。我已经尝试研究“切换”键值对的方法,但我找不到在 MongoDB 中使用 Python 的方法(例如:PyMongo)
{'name': 'Bob',
'school': 'UCLA',
'Basketball': 1
}
{'name': 'Bob',
'school': 'UCLA',
'Soccer':1
}
{'name': 'Bob',
'school': 'UCLA',
'Tennis':1
}
...
{'name': 'Caroline',
'school': 'UCSD',
'Basketball':1
}
{'name': 'Caroline',
'school': 'UCSD',
'Soccer':1
}
{'name': 'Bob',
'school': 'UCLA',
'Volleyball':1
}
解决方案
$arrayToObject
将键值对转换为对象,k 是运动,v 是 1$mergeObjects
合并必填字段及以上转换对象$replaceRoot
将上述合并对象替换为根
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
name: "$name",
school: "$school"
},
{
$arrayToObject: [[{ k: "$sport", v: 1 }]]
}
]
}
}
}
])
推荐阅读
- javascript - 使用 javascript 生成请求名称时 Flask 中的错误请求错误
- c++ - 对我的 C++ 金字塔作业进行小调整?我该怎么做?
- android - 如何在android中实现守卫和拦截器
- sql - 如何在不同的数据库中查找表列?
- r - 使用 mutate 和 case_when 在 dplyr 中通过双重条件重新编码变量
- sql - 使用每行计算值的 where 子句进行大规模更新?
- linux - 使用 sed 解析 nmap -oG 输出
- memory - Rust 线程之间的内存共享
- kotlin - is there a way to make a function to not return null when lookup from a map
- tensorflow2.0 - Tensorflow2.0 复用层