8
{
        "_id" : 160,
        "info" : [
            {
                'name': 'Serg',
                'proff': 'hacker'
            },
            null,
        ]
    }

ご覧のとおり、配列に null 要素があるため、情報配列から null 要素を削除する一般的なソリューションが必要です。

私はこれを試しました:

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

iterドキュメントのコレクションはどこにありますか。そしてpeopleコレクションです

私もシェルでこれを試しました:

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

しかし、上記の例のいずれも、この null をドキュメントから削除しません!! )))

4

1 に答える 1

22

これでうまくいくはずです。Python null では None と呼ばれます。

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

Pythonのnullオブジェクト?

mongo シェルでも、これはうまくいくはずです:

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

一度に複数のドキュメントを更新する更新演算子が必要な場合、つまり複数のドキュメントから null 値を引き出すには、multi:true オプションを指定する必要があります。デフォルトでは、クエリ引数が空白、つまり {} のままで、mulit:true が指定されていない場合、更新演算子は最初に見つかったドキュメントに対して機能するためです。

    db.people.update({},{$pull:{info:null}},{multi:true})
于 2013-02-11T04:34:37.803 に答える