使用Pymongo在集合中指定$ push位置

时间:2016-01-07 20:09:45

标签: python mongodb mongodb-query pymongo

我想知道如何在集合中使用$ push,我必须指定要添加信息的文档。 请考虑以下示例:

student1 = {
         'name': 'Adam',
         'year': 'sophomore',
         'age': 20,
         'class':[
                  {
                  'className': 'cse131',
                  'time': '2:30',
                  'finalGrade': 'A'
                  },
                  {
                  'className': 'cse240',
                  'time': '9:30',
                  'finalGrade': 'B'
                    }
                  ]
       } 

如果我只想更新'class'集合中的第一个文档('class'中的cse131),我将如何使用$ push来执行此操作?例如,如果我想更改“时间”或添加“通过/失败”选项?

我目前用于向集合中添加新文档的推送格式如下所示:

classNameInput = str(input("Class name?: "))
timeInput = str(input("Time of class?: "))
finalGradeInput = str(input("Final grade in class?: "))
collection.update(
{
    'name' : 'Adam'
},
{ 
    '$push': {
              'class':{
        'className' : classNameInput,
        'time': timeInput,
        'finalGrade': finalGradeInput
    }
              }
},
True)

我认为这种格式不允许我修改集合中的现有文档或将新的字段值对推送到集合中的现有文档中。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您使用的是错误的更新运算符。您需要的是$set更新运算符和位置$更新运算符。

db.collection.update_one(
    {'class.className': 'cse131'},
    {'$set': {'class.$.time': '3:30'}} # or {'class.$.status': 'pass'}
)