2016-12-31 3 views
1

는 일부 문서가 가정 : value이 아닌 존재하거나 value가 존재하고 비어와쿼리 MongoDB를 워드 프로세서하지 존재하거나 존재하고 빈

# 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' : {} 
} 

무엇을 조회 할 것은 문서입니다. 나는 방법을 다음 시도하고 작동하지 않습니다

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

오류 : $or docs$or에 따르면

pymongo.errors.OperationFailure: unknown operator: $or 
+0

같은 것을 할 또는 최상위 키가 아닌 내부 필드를 should.be 경우 : 그래서 당신은 당신의 두 번째 조건을 반전 할 필요가있다. docs를보십시오; https://docs.mongodb.com/manual/reference/operator/query/or/ –

+0

그래서 최상위 레벨에두면 다른 쿼리 args를 처리하는 방법을 내가 원하는대로 만들 수 있습니까? – Cl0udSt0ne

답변

1

만 최고 수준의 키가 아닌 내부 필드 필터로 사용할 수 있습니다.

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

야로슬라프에 의해 대답은 정확하지만, 당신이 $ 때문에

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

레코드가 일치하지 않습니다. 빈 dict가있는 레코드와 일치하지 않습니다. – Cl0udSt0ne

+0

예,이 쿼리에 오류가 있습니다. $ 또는 올바른 방법입니다. –