【问题标题】:update value inside the nested document in MongoDB ( pymongo )更新 MongoDB ( pymongo ) 嵌套文档中的值
【发布时间】:2020-04-07 23:28:39
【问题描述】:

如何使用 MongoDB 和 python 更新数据库中的值

以下是我要更新的文档的架构:

{'_id': ObjectId('5e8c8f19efd3d269180afdf6'), 
 'student': 2, 
 'sem': 
 [
     {
         'sem_2': {
              'c': 90, 
              'c++': 98, 
              'java': 82, 
              'go': 96, 
              'python': 99
                 }
        }, 

      {
          'sem_1': {
              'daa': 90, 
              'dbms': 70, 
              'es': 79, 
              '.net': 89, 
              'ds': 88
          }
      }
 ]

}

我想更新文档中的“sem_1”值。

{

          'sem_1': {
              'daa': 99, 
              'dbms': 99, 
              'es': 99, 
              '.net': 99, 
              'ds': 99
          }

}

我需要像这样的输出

{'_id': ObjectId('5e8c8f19efd3d269180afdf6'), 
 'student': 2, 
 'sem': 
 [
     {
         'sem_2': {
              'c': 90, 
              'c++': 98, 
              'java': 82, 
              'go': 96, 
              'python': 99
                 }
        }, 

      {
          'sem_1': {
              'daa': 99, 
              'dbms': 99, 
              'es': 99, 
              '.net': 99, 
              'ds': 99
          }
      }
 ]

}

我正在使用 PyMongo,有没有办法更新这种文档?

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    您可以在 MongoDB 中使用位置 $ 运算符来做到这一点:

    db.collection.updateOne(
      { student: 2, "sem.sem_1": { $exists: true } }, // You need to have this `sem.sem_1` check in order to make `$` work
      {
        $set: {
          "sem.$": {
            sem_1: {
              daa: 99,
              dbms: 99,
              es: 99,
              ".net": 99,
              ds: 99,
            }
          }
        }
      }
    );
    

    pymongo 中:

    您也可以使用.update_one() 来做同样的事情:

    db.collection.update_one({ student: 2, "sem.sem_1": { $exists: true } }, 
          {
            $set: {
              "sem.$": {
                sem_1: {
                  daa: 99,
                  dbms: 99,
                  es: 99,
                  ".net": 99,
                  ds: 99,
                }
              }
            }
          })
    

    注意:因为update_one 将返回WriteResult 而不是文档,如果您想返回实际文档,请尝试.find_one_and_update()

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2015-08-27
      • 1970-01-01
      • 2016-08-04
      • 2010-11-11
      • 2020-12-24
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多