查询 Mongodb 个字典字段不存在或存在且为空的文档

Query Mongodb docs with the dict field not exists or exists and empty

假设有一些文档:

# No 'value'
{
'name': 'T1',
}

# 'value' is a non-empty dict
{
'name': 'T1',
'value': {'a':'A', 'b':'B'}
}

# 'value' is a empty dict
{
'name': 'T1',
'value' : {}
}

我想查询的是 value 不存在或 value 存在但为空的文档。我尝试了以下方法但不起作用:

cursor = collection.find({
            'name': {"$exists": 1},
            'value': {"$or": [{"$exists":0}, {"$eq": {}}]}
        })

错误:

pymongo.errors.OperationFailure: unknown operator: $or

根据 $or docs $or 只能用作顶级键,不能用作内部字段过滤器。所以你需要反转你的第二个条件:

collection.find({
    "name": { "$exists": 1 },
    "$or": [ { "value": { "$exists": 0 } }, { "value": { "$eq": {} } } ]
})

Yaroslav 的回答是正确的,但是如果你做类似

的事情呢?
cursor = collection.find({
            'name': {"$exists": 1},
            'value.a': {"$exists":0}
        });