假设有一些文档:
# 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
答案 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;
}
}