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

배열에서 null 요소가 있음을 알 수 있듯이 정보 배열에서 null 요소를 제거하는 일반적인 솔루션이 필요합니다. mongo 배열에서 null 요소를 제거하십시오.

나는 노력이 : iter 문서의 모음입니다

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

. 그리고 people 내가 또한 쉘에서이 시도

모음에게 있습니다 :

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

그러나 위의 예 중 어느 것도 내 문서에서이 널 (null)을 삭제하지 않습니다!))

답변

18

이렇게하면 문제가 해결됩니다. 파이썬에서 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}}) 

는, 한 번에 하나의 문서를 업데이트하려면, 그 당겨하는 것입니다 여러 문서에서 Null 값을 제외하면 multi : true 옵션을 제공해야합니다. 기본적으로 검색어 arguemnt가 비어있는 경우 즉, {} 및 mulit : true가 제공되지 않으면 업데이트 연산자는 찾은 첫 번째 문서에서 작동합니다.

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

대단히 감사합니다. 그것은 내가 찾고 있었던 바로 그 것이다. – Vor

관련 문제