몽고디비 도큐먼트를 조회할 때 사용하는 find()
메소드의 두 번째 파라미터로 들어가는 것이 바로 projection
이다.
쿼리에 해당하는 도큐먼트들을 조회한 후 projection
을 통해 필요한 필드만을 return 할 수 있다.
projection을 사용하면 무겁거나, 방대한 도큐먼트들에 대한 효율적인 조회가 가능하다.
그러던 중 몽고디비에서 find()
메소드를 통해 디비에서 데이터를 조회하는데 아래와 같은 에러가 발생했다.
나의 쿼리는 다음과 같다.
query = {}
projection = {
'_id': False,
'createdAt': False,
'updatedAt': False
'hostName': True,
'status': True,
'os': True,
'brand': True
}
machineDocs = collection.find(query, projection)
하지만 위와 같은 에러가 발생했다.
Projection cannot have a mix of inclusion and exclusion., full error: {'ok': 0.0, 'errmsg': 'Projection cannot have a mix of inclusion and exclusion.', 'code': 2, 'codeName': 'BadValue'}
해당 에러와 관련해서 MongoDB Dev Community에서 찾아보니 projection은 포함과 제외를 동시에 혼영할 수 없다는 사실을 발견했다. 생각해보니 너무나도 당연한 말이었는데 ..
It does not allow the mixing of inclusions and exclusion when returning a result.
단 혼용할 수 있는 필드가 있는데 바로 _id
이다. _id
의 경우 다른 필드 projection 들과 함께 사용할 수 있다고 한다.
_id is the only field which you need to explicitly exclude in the projection