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

MongoDB에서 배열에 대해 AND 쿼리 수행하는 방법 – $all 연산자 활용 가이드


MongoDB에서 배열 필드에 대해 AND 조건으로 쿼리를 실행하려면 $all 연산자를 사용하면 됩니다. $all은 지정한 모든 값이 배열 안에 동시에 포함되어 있는 문서만 반환합니다. 먼저 예제에 사용할 컬렉션과 문서를 생성해 보겠습니다.

> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["C","Java","MongoDB","MySQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73e7a8f9e6ff3eb0ce433")
}
> db.andQueryDemo.insertOne({"StudentName":"David Miller","FavouriteSubject":["C++","Java","MongoDB","SQL Server"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73ea48f9e6ff3eb0ce434")
}
> db.andQueryDemo.insertOne({"StudentName":"Carol Taylor","FavouriteSubject":["Python","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc73ed38f9e6ff3eb0ce435")
}

컬렉션의 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.andQueryDemo.find().pretty();

위 쿼리는 다음과 같은 결과를 출력합니다.

{
   "_id" : ObjectId("5cc73e7a8f9e6ff3eb0ce433"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "C",
      "Java",
      "MongoDB",
      "MySQL"
   ]
}
{
   "_id" : ObjectId("5cc73ea48f9e6ff3eb0ce434"),
   "StudentName" : "David Miller",
   "FavouriteSubject" : [
      "C++",
      "Java",
      "MongoDB",
      "SQL Server"
   ]
}
{
   "_id" : ObjectId("5cc73ed38f9e6ff3eb0ce435"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "Python",
      "PL/SQL"
   ]
}

$all 연산자로 배열 AND 쿼리 실행하기

이제 $all 연산자를 사용하여 FavouriteSubject 배열에 "Java"와 "MongoDB"가 둘 다 포함된 문서만 조회해 보겠습니다.

> db.andQueryDemo.find({FavouriteSubject:{$all:["Java","MongoDB"]}}).pretty();

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

{
   "_id" : ObjectId("5cc73e7a8f9e6ff3eb0ce433"),
   "StudentName" : "Carol Taylor",
   "FavouriteSubject" : [
      "C",
      "Java",
      "MongoDB",
      "MySQL"
   ]
}
{
   "_id" : ObjectId("5cc73ea48f9e6ff3eb0ce434"),
   "StudentName" : "David Miller",
   "FavouriteSubject" : [
      "C++",
      "Java",
      "MongoDB",
      "SQL Server"
   ]
}

$all 연산자의 동작 원리

$all 연산자는 배열 내 요소의 순서나 개수와 상관없이, 지정한 값들이 모두 존재하는지만 확인합니다. 따라서 "Java"와 "MongoDB"가 배열의 어느 위치에 있더라도 두 값이 모두 포함되어 있다면 해당 문서는 조건에 일치하는 것으로 판단됩니다. 세 번째 문서처럼 두 값 중 하나라도 빠져 있으면 결과에서 제외됩니다. 참고로 $all에 값을 하나만 지정하면 일반적인 동등(equality) 매칭과 동일하게 동작합니다.