簡體   English   中英

更新 MongoDB ( pymongo ) 中嵌套文檔內的值

[英]update value inside the nested document in MongoDB ( pymongo )

如何使用 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
          }

}

我需要 output 之類的

{'_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,有沒有辦法更新這種文檔?

您可以使用 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM