从Mongo数组中移除null元素

8 投票
1 回答
9115 浏览
提问于 2025-04-17 15:27
{
        "_id" : 160,
        "info" : [
            {
                'name': 'Serg',
                'proff': 'hacker'
            },
            null,
        ]
    }

如你所见,我的数组里有一个空元素,我需要一个通用的方法来从 info 数组中删除这些空元素。

我试过这个:

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

这里 iter 是一个文档集合,而 people 是另一个集合。

我还在命令行中试过这个:

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

但是以上这些方法都没有把这个空元素从我的文档中删除掉!! ))

1 个回答

23

这应该对你有帮助。在Python中,空值叫做None。

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

Python中的空对象是什么?

在mongo shell中,这也应该可以使用:

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

如果你想用更新操作符一次更新多个文档,也就是从多个文档中删除空值,那么你需要加上multi:true这个选项。因为默认情况下,如果查询参数留空,也就是{},而没有提供multi:true,更新操作只会作用于它找到的第一个文档。

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

撰写回答