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

Như bạn có thể thấy tôi có phần tử null trong mảng của mình, tôi cần một giải pháp chung sẽ loại bỏ phần tử rỗng khỏi mảng thông tin.Xóa phần tử null khỏi mảng mongo

Tôi cố gắng này:

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

nơi iter là một tập hợp các tài liệu. và people là một bộ sưu tập

Tôi cũng đã cố gắng này trong vỏ:

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

Nhưng không ai trong số các ví dụ trên xóa null này từ tài liệu của tôi !!))

Trả lời

18

Điều này sẽ phù hợp với bạn. Trong python null được gọi là None.

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

null object in Python?

Cũng trong vỏ Mongo, điều này sẽ làm việc ra:

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

Nếu bạn muốn các nhà điều hành cập nhật, cập nhật hơn là một tài liệu cùng một lúc, đó là để kéo ra giá trị null từ nhiều tài liệu, sau đó bạn phải cung cấp tùy chọn đa: đúng. Bởi vì theo mặc định, nếu truy vấn được để trống, tức là {} và mulit: true không được cung cấp, cập nhật toán tử hoạt động trên tài liệu đầu tiên mà nó tìm thấy

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

Cảm ơn bạn rất nhiều !!! Đó chính xác là những gì tôi đang tìm kiếm. – Vor

Các vấn đề liên quan