2016-01-03 121 views
0

我想学习一些基本的MongoDB,我很困惑如何使用$ push将更多的数据添加到我的文档。下面是我的代码:MongoDB推pymongo的建议

from pymongo import MongoClient 
client = MongoClient() 
db = client.classes 
collection = db.StudentsExample 
student1 = { 
     'name': 'adam', 
     'year': 'sophomore', 
     'age': 19, 
     'class':[ 
        { 
        'className': 'cse131', 
        'time': '2:30', 
        'finalGrade': 'A' 
        }, 
        { 
        'className': 'cse240', 
        'time': '9:30', 
        'finalGrade': 'B' 
        } 
        ] 
     } 
student2 = { 
     'name': 'bob', 
     'year': 'sophomore', 
     'age': 19, 
     'class':[ 
        { 
        'className': 'cse131', 
        'time': '2:30', 
        'finalGrade': 'A' 
        }, 
        { 
        'className': 'cse240', 
        'time': '9:30', 
        'finalGrade': 'B' 
        } 
        ] 
     } 

num = int(input("How many more classes?: ")) 

for x in range(0, num): 
    classNameInput = str(input("Class name?: ")) 
    timeInput = str(input("Time of class?: ")) 
    finalGradeInput = str(input("Final grade in class?: ")) 
    db.StudentsExample.update(
     {'name': "adam"}, 
     {'$push': {'class.className': classNameInput, 'class.time': timeInput, 'class.finalGrade':finalGradeInput}} 
     ) 



cursor = collection.find({}) 
for document in cursor: print(document) 

我认为这样做是在student1的类文档中添加另一个文档。因此,举例来说,如果用户有输入提示时: 类名称:生物 时间:2:30 最终成绩:C

的结果将是:

student1 = { 
     'name': 'adam', 
     'year': 'sophomore', 
     'age': 19, 
     'class':[ 
        { 
        'className': 'cse131', 
        'time': '2:30', 
        'finalGrade': 'A' 
        }, 
        { 
        'className': 'cse240', 
        'time': '9:30', 
        'finalGrade': 'B' 
        }, 
        { 
        'className': 'bio 
        'time': 2:30 
        'finalGrade': 'C' 
        } 
        ] 
     } 
student2 = { 
     'name': 'bob', 
     'year': 'sophomore', 
     'age': 19, 
     'class':[ 
        { 
        'className': 'cse131', 
        'time': '2:30', 
        'finalGrade': 'A' 
        }, 
        { 
        'className': 'cse240', 
        'time': '9:30', 
        'finalGrade': 'B' 
        } 

        ] 
     } 

我已经插入两这些元素放入数据库中,所以即使插入方法不在此代码中,它们仍在那里。

但是,它不工作 - 它给出了错误声明“不能使用部件(类class.time)来遍历元素({class:[{finalGrade:”A“,time:”2: 30“,className:”cse131“},{finalGrade:”B“,时间:”9:30“,className:”cse240“}]})

任何人都可以告诉我我做错了什么?我无法找到如何使用推与Python明确的指示..谢谢

回答

0

就快!

变化

{'$push': {'class.className': classNameInput, 'class.time': timeInput, 'class.finalGrade':finalGradeInput} 

{'$push': {class: {'className': classNameInput, 'time': timeInput, 'finalGrade':finalGradeInput}} 

一般格式为

{'$push': {<array to push to>: <value to push onto array>}} 

如果我们看一下你的代码,你可以看到当前正在努力推动classNameInput到阵列class.className。 Mongo然后出错,因为class.className不是数组!