查询 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}
});
假设有一些文档:
# 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}
});