使用Pymong指定集合中的$push位置

2024-04-25 19:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在一个集合中使用$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来实现这一点?例如,如果我想更改'time'或添加'pass/fail'选项?你知道吗

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

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)

我认为这种格式不允许我修改集合中的现有文档,也不允许我将新的字段-值对推入集合中的现有文档。 提前谢谢!你知道吗


Tags: name文档inputtime格式pushclassstr
1条回答
网友
1楼 · 发布于 2024-04-25 19:22:46

您使用了错误的更新运算符。您需要的是^{}更新操作符和位置^{}更新操作符。你知道吗

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

相关问题 更多 >