Python MongoDB:如何将文档数组转换为单个文档?
本文件在“学校”收藏中。我一直在尝试使用Python MongoDB:如何将文档数组转换为单个文档?,python,mongodb,Python,Mongodb,本文件在“学校”收藏中。我一直在尝试使用 { "teachers" : [ {"name": "Lucy", "id": 3, course: "history"}, {"name": "Mark", "id": 6, "course": "maths"}, {"name": "Joan", "id": 20, course: "French"} ] } 我也试过了
{
"teachers" : [
{"name": "Lucy", "id": 3, course: "history"},
{"name": "Mark", "id": 6, "course": "maths"},
{"name": "Joan", "id": 20, course: "French"}
]
}
我也试过了
db.school.find({teachers:{id:3}})
但我知道它不起作用,因为mongo无法查看嵌入式阵列内部。
因此,我想将这些嵌入的文档转换为单独的文档。也就是说,删除嵌入和“教师”键,为每个教师创建一个单独的文档
最终的“学校”收藏将是
db.school.find({teacher.id:3})
我想用python完成这项工作,并将新文档保存到一个集合中 编辑 这就是我目前的想法:
{"name": "Lucy", "id": 3, "course": "history"},
{"name": "Mark", "id": 6, "course": "maths"},
{"name": "Joan", "id": 20, "course": "French"}
这个怎么样
这是怎么回事?您可以使用mongo v2.2+中的聚合命令(在pymongo中):
school_records = db.school.find()
for i in school_records:
for teacher in i['teachers']:
db.individual.insert(teacher)
您可以使用mongo v2.2+中的聚合命令(在pymongo中):
school_records = db.school.find()
for i in school_records:
for teacher in i['teachers']:
db.individual.insert(teacher)
顺便说一下,Mongodb可以找到数组中的嵌入文档:
fagg=db.school.aggregate([{$unwind: "$teachers"},
{$project: {name: "$teachers.name",
id: "$teachers.id", course: "$teachers.course"}}])
fagg.result.forEach(function(o){
db.teachers.insert({_id: o.id, name: o.name, course: o.course})})
您可以在上了解有关点表示法的更多信息
如果目标是仅返回嵌入文档,则可以使用请求:
顺便说一下,Mongodb可以找到数组中的嵌入文档:
fagg=db.school.aggregate([{$unwind: "$teachers"},
{$project: {name: "$teachers.name",
id: "$teachers.id", course: "$teachers.course"}}])
fagg.result.forEach(function(o){
db.teachers.insert({_id: o.id, name: o.name, course: o.course})})
您可以在上了解有关点表示法的更多信息
如果目标是仅返回嵌入文档,则可以使用请求:
问题是,;有没有可能把{“老师”{姓名:“露西”,身份证:3,课程:“历史”},{姓名:“马克”,身份证:6,课程:“数学”},{姓名:“琼”,身份证:20,课程:“法语”}变成{姓名:“露西”,身份证:3,课程:“历史”},{姓名:“马克”,身份证:6,课程:“数学”},{姓名:“琼”,身份证:20,课程:“法语”}我不明白。“可能”是什么意思?用python?使用mongodb控制台还是其他方式?我希望使用python来完成这项工作,并将新文档保存到一个集合中。抱歉,我不是很清楚。编写python脚本来进行数据库转换将是一种有效的方法。您也可以使用MongoShell,因为它是一个成熟的javascript解释器,但是当您觉得使用python更舒服时,就可以使用它。那么,是什么阻止了您这样做呢?也许您可以手动将旧集合中的数据替换为新集合?有必要使用脚本吗?问题是;有没有可能把{“老师”{姓名:“露西”,身份证:3,课程:“历史”},{姓名:“马克”,身份证:6,课程:“数学”},{姓名:“琼”,身份证:20,课程:“法语”}变成{姓名:“露西”,身份证:3,课程:“历史”},{姓名:“马克”,身份证:6,课程:“数学”},{姓名:“琼”,身份证:20,课程:“法语”}我不明白。“可能”是什么意思?用python?使用mongodb控制台还是其他方式?我希望使用python来完成这项工作,并将新文档保存到一个集合中。抱歉,我不是很清楚。编写python脚本来进行数据库转换将是一种有效的方法。您也可以使用MongoShell,因为它是一个成熟的javascript解释器,但是当您觉得使用python更舒服时,就可以使用它。那么,是什么阻止了您这样做呢?也许您可以手动将旧集合中的数据替换为新集合?有必要使用脚本吗?非常感谢!是否可以使最终的_id与原始集合中的id相同?我认为这不是一个好主意(如果使用默认的ObjectId)。但这是可能的。非常感谢!是否可以使最终的_id与原始集合中的id相同?我认为这不是一个好主意(如果使用默认的ObjectId)。但这是可能的。
db.school.aggregate(
{$match: { 'teachers.id' : 3 }},
{$unwind : '$teachers'},
{$project: {
_id: 0,
name: '$teachers.name',
id: '$teachers.id',
course: '$teachers.course'
}},
{$match: {id:3}}
);