2013-02-11 119 views
7
{ 
     "_id" : 160, 
     "info" : [ 
      { 
       'name': 'Serg', 
       'proff': 'hacker' 
      }, 
      null, 
     ] 
    } 

正如你所看到的,我的数组中有空元素,我需要一个通用的解决方案,它将从info数组中删除空元素。从mongo数组中删除null元素

我尝试这样做:

for doc in iter: 
    people.update({ '_id' : doc['_id']}, { '$pull' : { 'info' : 'null' }}) 

其中iter是文档的集合。和people是一家集

我也是在壳试过这样:

> db.people.findAndModify({ query: {}, update: {'$pull': {info:null} } }) 

但没有上述的例子,从我的文档删除空! ))

回答

18

这应该适合你。在python中,null被称为None。

for doc in iter: 
     people.update({'_id':doc[id]},{'$pull':{'info':None}}) 

null object in Python?

此外,在蒙戈外壳,这应该工作了:

db.people.update({_id:160},{$pull:{info:null}}) 

如果你想更新操作,以每次更新一个以上的文件,那就是拉从多个文档中取出空值,那么您必须提供multi:true选项。因为默认情况下,如果查询arguemnt留空即{}和多功能使用:真不提供,更新运营商工作的一号文件,它发现

db.people.update({},{$pull:{info:null}},{multi:true}) 
+0

非常感谢您!这正是我所期待的。 – Vor 2013-02-11 14:20:59