使用dict字段查询Mongodb文档不存在或存在且为空

时间:2016-12-31 10:42:49

标签: mongodb pymongo

假设有一些文档:

# 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

2 个答案:

答案 0 :(得分:1)

根据$or docs $or,只能用作顶级关键字,而不能用于字段过滤器。所以你需要颠倒你的第二个条件:

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

答案 1 :(得分:0)

雅罗斯拉夫的回答是正确的,但如果你做了类似

的事情怎么办?
 server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}

 server {
listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}

 server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name example.com www.example.com;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    root /home/tim/site.folder;
    index index.html index.htm index.nginx-debian.html;

    location ~ /.well-known {
        allow all;
    }
    location / {
        try_files $uri $uri/ =404;
    }
 }