【问题标题】:MongoDB push with pymongo advice带有 pymongo 建议的 MongoDB 推送
【发布时间】:2016-01-03 03:29:07
【问题描述】:

我正在尝试学习一些基本的 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 的班级文档中添加另一个文档。例如,如果用户在提示时输入: 班级名称:生物 时间: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", time: "9:30", className: "cse240" } ]})

谁能告诉我我做错了什么?我找不到关于如何在 python 中使用 push 的明确说明。谢谢!

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    你快到了:

    改变

    {'$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 不是数组!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多