如何从MongoDB集合中的三重嵌套文档中删除对象?

时间:2017-12-30 18:41:10

标签: mongodb python-3.x pymongo

我在MongoDB中有一个Wikidata集合,其中包含以下结构的文档:

{
   id: 178
   type: "something"
   claims: {
      P1{
         [0]: {
           id: "234"
           obj:{...}
         }
         [1]: {
           id: "456"
           obj:{}
         }
         [2]: {
           id: "789"
           obj:{...}          
         }
      }
      P2: {
         [list of objects]
      }
      P3: {
         [list of objects]
      }
   }
}

我正在尝试迭代claims下的所有项目(即P1, P2, P3)并删除其下的某些对象(例如id:234

换句话说,如何用id: "234"删除嵌套对象?

1 个答案:

答案 0 :(得分:0)

P1下,P2P3字段是嵌套数组。

正如@veeram评论的那样,使用$pull运算符的更新查询是此方案的理想选择。

condition = {'id': '234'}
field_val = {'claims.{}'.format(field): condition for field in ('P1', 'P2', 'P3')}

db.collection_name.update({}, {$pull: field_val })