【发布时间】:2014-01-31 04:39:22
【问题描述】:
我是 mongodb 的新手,正在使用它来存储嵌套文档。例如。每个文档包含每个班级的学生数组。我正在尝试更新每个数组节点中的信息。有没有更好的方法来代替一次更新每个数组元素?
这是我在收藏中的记录-
{
“_id” : “23343” ,
“class” : “Physics”,
“students”: [
{ “id” : “2412” , “name” : "Alice", “mentor” : 0 },
{ “id” : “2413” , “name” : "Bob, “mentor” : 0 },
]
}
集合中有多个这样的记录。
我有一个需要为每条记录更新的课程列表。例如,我为上述记录获取一组学生,以便像这样更新 -
{
“_id” : “23343” ,
“class” : “Physics”,
“students”: [
{ “id” : “2412” , “name” : "Alice", “mentor” : "Mark" },
{ “id” : “2413” , “name” : "Bob, “mentor” : "Jackson" },
]
}
更新记录的最佳方式是什么?
我正在使用 python。直观地说,我可以在课程的集合上执行 find()。我得到了一个光标。我可以为每个光标做一个。我相信 mongodb 在 update() 上更新了整个文档。
for record in courseCollection.find():
recordId = record['_id']
updatedList = getUpdatedStudentList( record['students'])
updatedRecord = prepareUpdatedRecord(updatedList)
courseCollection.update( {'_id' : recordId}, updateList)
pymongo 文档站点没有讨论更新函数中的 set 选项。除非我使用它,否则我相信 mongodb 会更新整个文档。
通过传入 _id 来调用带有查询选项的更新似乎是不必要的,因为我刚刚进行了查询并且有记录的句柄。我可以通过不再查询更新来以某种方式使用光标在那里进行更新吗?
【问题讨论】: