MongoDB 使用 pymongo 建议推送
MongoDB push with pymongo advice
我正在尝试学习一些基础知识 MongoDB,但我对如何使用 $push 向我的文档添加更多数据感到困惑。这是我的代码:
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 的 class 文档中添加另一个文档。因此,例如,如果用户在提示时输入:
Class 姓名:简历
时间: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'
}
]
}
我已经将这两个元素都插入到数据库中,因此即使插入方法不在此代码中,它们也在那里。
但是,它不起作用——它给出了错误语句 "cannot use the part (class of class.time) to traverse the element ({class: [ { finalGrade: "A", time: "2:30", className: "cse131" }, { 最终成绩: "B", 时间: "9:30", class姓名: "cse240" } ]})
谁能告诉我我做错了什么?我找不到关于如何使用 python 推送的明确说明。谢谢!
你快完成了:
改变
{'$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
不是数组!
我正在尝试学习一些基础知识 MongoDB,但我对如何使用 $push 向我的文档添加更多数据感到困惑。这是我的代码:
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 的 class 文档中添加另一个文档。因此,例如,如果用户在提示时输入: Class 姓名:简历 时间: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'
}
]
}
我已经将这两个元素都插入到数据库中,因此即使插入方法不在此代码中,它们也在那里。
但是,它不起作用——它给出了错误语句 "cannot use the part (class of class.time) to traverse the element ({class: [ { finalGrade: "A", time: "2:30", className: "cse131" }, { 最终成绩: "B", 时间: "9:30", class姓名: "cse240" } ]})
谁能告诉我我做错了什么?我找不到关于如何使用 python 推送的明确说明。谢谢!
你快完成了:
改变
{'$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
不是数组!