Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 두 필드가 모두 FALSE인 문서를 제외하는 쿼리 작성법

MongoDB에서 두 필드가 모두 FALSE인 문서 제외하기

MongoDB에서 두 필드의 값이 모두 false인 문서를 제외하고 조회하려면 $or 연산자와 $expr 연산자를 함께 사용하면 됩니다. 먼저 예제에 사용할 컬렉션을 생성해 보겠습니다. 이 컬렉션의 문서에는 true 또는 false 값을 가지는 isLiveInUSisMarried 두 개의 불리언(Boolean) 필드가 포함되어 있습니다.

> db.orTwoFieldsDemo.insertOne({"isLiveInUS":true,"isMarried":false});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdfd86abf3115999ed5120d")
}
> db.orTwoFieldsDemo.insertOne({"isLiveInUS":true,"isMarried":true});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdfd876bf3115999ed5120e")
}
> db.orTwoFieldsDemo.insertOne({"isLiveInUS":false,"isMarried":false});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cdfd87dbf3115999ed5120f")
}

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회하는 쿼리는 다음과 같습니다.

> db.orTwoFieldsDemo.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5cdfd86abf3115999ed5120d"), "isLiveInUS" : true, "isMarried" : false }
{ "_id" : ObjectId("5cdfd876bf3115999ed5120e"), "isLiveInUS" : true, "isMarried" : true }
{ "_id" : ObjectId("5cdfd87dbf3115999ed5120f"), "isLiveInUS" : false, "isMarried" : false }

$or와 $expr을 활용한 필터링 쿼리

이제 두 필드의 값이 모두 FALSE인 문서는 제외하고, 두 필드 중 하나라도 TRUE이거나 한쪽이 TRUE이고 다른 쪽이 FALSE인 문서만 조회하는 쿼리를 살펴보겠습니다. $expr 연산자 내부에 $or 연산자를 사용하면 문서 내부의 필드 값을 그대로 조건식으로 평가할 수 있습니다.

> db.orTwoFieldsDemo.find({ $expr: { $or: [ "$isLiveInUS", "$isMarried" ] } });

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5cdfd86abf3115999ed5120d"), "isLiveInUS" : true, "isMarried" : false }
{ "_id" : ObjectId("5cdfd876bf3115999ed5120e"), "isLiveInUS" : true, "isMarried" : true }

결과를 보면 isLiveInUSisMarried가 모두 false였던 세 번째 문서는 조회 결과에서 제외된 것을 확인할 수 있습니다. 이처럼 $expr$or를 조합하면 문서 내부의 필드 값을 직접 비교·평가하여 원하는 조건에 맞는 데이터만 효율적으로 필터링할 수 있습니다.