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

MongoDB에서 배열의 하위 집합 조건으로 레코드 조회하는 방법

MongoDB에서 배열 필드에 특정 값들이 모두 포함되어 있는지 확인하면서 레코드를 조회해야 하는 경우가 있습니다. 이럴 때는 $all 연산자를 사용하면 됩니다. $all은 지정한 배열의 모든 요소가 대상 배열 안에 존재할 때만 해당 문서를 반환합니다.


1. 샘플 컬렉션 생성하기

먼저 학생의 프로그래밍 스킬 목록을 담은 문서로 컬렉션을 생성해 보겠습니다.

> db.subsetOfAnArrayDemo.insertOne({"StudentProgrammingSkills":
   ["Java","MongoDB","MySQL","C++","Data Structure","Algorithm","Python","Oracle","SQL Server"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb9d1e1895c4fd159f80804")
}

2. 저장된 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

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

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

{
   "_id" : ObjectId("5cb9d1e1895c4fd159f80804"),
   "StudentProgrammingSkills" : [
      "Java",
      "MongoDB",
      "MySQL",
      "C++",
      "Data Structure",
      "Algorithm",
      "Python",
      "Oracle",
      "SQL Server"
   ]
}

3. $all 연산자로 배열의 하위 집합 조회하기

이제 $all 연산자를 활용해 StudentProgrammingSkills 배열에 'MongoDB''MySQL'이 모두 포함된 문서만 조회해 보겠습니다.

> db.subsetOfAnArrayDemo.find({ StudentProgrammingSkills:
   { $all: [ 'MongoDB', 'MySQL' ] } } ).pretty();

조건을 만족하는 문서가 다음과 같이 출력됩니다.

{
   "_id" : ObjectId("5cb9d1e1895c4fd159f80804"),
   "StudentProgrammingSkills" : [
      "Java",
      "MongoDB",
      "MySQL",
      "C++",
      "Data Structure",
      "Algorithm",
      "Python",
      "Oracle",
      "SQL Server"
   ]
}

참고 사항

$all 연산자는 지정한 값들의 순서와 무관하게 배열 내 포함 여부만 검사합니다. 또한 단일 값을 조회할 때는 $in과 결과가 같지만, 여러 값이 모두 존재해야 하는 조건에는 반드시 $all을 사용해야 합니다.