【问题标题】:Query Mongodb docs with the dict field not exists or exists and empty查询 dict 字段不存在或存在且为空的 Mongodb 文档
【发布时间】:2017-05-15 10:12:48
【问题描述】:

假设有一些文档:

# 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

【问题讨论】:

标签: mongodb pymongo


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    雅罗斯拉夫的答案是正确的,但是如果你做类似的事情会怎样

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

    【讨论】:

    • 只匹配不存在的记录,不匹配空dict的记录。
    • 是的,这个查询是错误的,$or 是正确的方式
    猜你喜欢
    • 2014-04-12
    • 2022-01-09
    • 2021-12-02
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2017-08-16
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多