2013-02-11 157 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