在MongoDB(pymongo)中的嵌套文档中更新值

k1n1先生

如何使用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,是否可以更新此类文档?

谁-假面真灵魂

您可以在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将返回写结果,而不是文件,如果你想返回实际的文档,然后尝试.find_one_and_update()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章