MongoDB에서 $and와 $in 연산자로 조건 검색하기
MongoDB에서 특정 FirstName과 LastName을 가진 문서를 찾으려면 find() 메서드 안에서 $and 연산자와 $in 연산자를 함께 사용하면 됩니다. $and는 여러 조건이 모두 참일 때만 문서를 반환하고, $in은 지정한 값 목록 중 하나라도 일치하면 통과시켜 주기 때문에 두 연산자를 조합하면 유연한 복합 조건 검색이 가능합니다.
먼저 예제로 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
1. 컬렉션 생성 및 문서 삽입
> db.demo692.insertOne({FirstName:"Chris","LastName":"Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea585dca7e81adc6a0b396a")
}
> db.demo692.insertOne({FirstName:"John","LastName":"Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea585e2a7e81adc6a0b396b")
}
> db.demo692.insertOne({FirstName:"John","LastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea585e7a7e81adc6a0b396c")
}
> db.demo692.insertOne({FirstName:"John","LastName":"Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea585efa7e81adc6a0b396d")
}
> db.demo692.insertOne({FirstName:"Adam","LastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea585faa7e81adc6a0b396e")
}2. 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo692.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea585dca7e81adc6a0b396a"), "FirstName" : "Chris", "LastName" : "Brown" }
{ "_id" : ObjectId("5ea585e2a7e81adc6a0b396b"), "FirstName" : "John", "LastName" : "Brown" }
{ "_id" : ObjectId("5ea585e7a7e81adc6a0b396c"), "FirstName" : "John", "LastName" : "Smith" }
{ "_id" : ObjectId("5ea585efa7e81adc6a0b396d"), "FirstName" : "John", "LastName" : "Doe" }
{ "_id" : ObjectId("5ea585faa7e81adc6a0b396e"), "FirstName" : "Adam", "LastName" : "Smith" }3. 특정 FirstName과 LastName으로 문서 조회하기
다음은 특정 FirstName과 LastName을 가진 문서를 찾는 쿼리입니다. FirstName이 "Chris" 또는 "John"이면서, 동시에 LastName이 "Brown" 또는 "Smith"인 문서만 반환됩니다.
> db.demo692.find({$and:[ {FirstName: {$in: ["Chris", "John"]}},
... {LastName:{$in:["Brown", "Smith"]}}
... ]
... }
... );쿼리 실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea585dca7e81adc6a0b396a"), "FirstName" : "Chris", "LastName" : "Brown" }
{ "_id" : ObjectId("5ea585e2a7e81adc6a0b396b"), "FirstName" : "John", "LastName" : "Brown" }
{ "_id" : ObjectId("5ea585e7a7e81adc6a0b396c"), "FirstName" : "John", "LastName" : "Smith" }결과 분석
출력 결과를 보면 두 가지 포인트를 확인할 수 있습니다.
- John / Doe 문서는 제외되었습니다. FirstName 조건("Chris" 또는 "John")은 충족하지만, LastName이 "Doe"라서 LastName 조건("Brown" 또는 "Smith")을 만족하지 않기 때문입니다.
- Adam / Smith 문서도 제외되었습니다. LastName 조건은 충족하지만 FirstName이 "Adam"이라 첫 번째 조건을 통과하지 못했습니다.
즉, $and로 묶인 모든 조건을 동시에 만족하는 문서만 최종 결과에 포함됩니다. 이처럼 $and와 $in을 조합하면 여러 필드에 대해 각각 허용 가능한 값 목록을 지정하는 복합 검색을 간단하게 구현할 수 있습니다.