2016-01-03 84 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不是數組!