배열의 MongoDB 집계 일치

Mehvish Ashiq 2024년2월16일
  1. 배열의 MongoDB 집계 일치
  2. $in과 함께 $match를 사용하여 MongoDB의 배열에서 일치하는 문서 찾기
  3. $match$eq와 함께 사용하여 MongoDB의 배열에서 일치하는 문서 찾기
  4. $all과 함께 $match를 사용하여 MongoDB의 배열에서 일치하는 문서 찾기
배열의 MongoDB 집계 일치

이 기사에서는 코드 예제를 통해 배열에서 MongoDB 집계 일치를 사용하는 방법에 대해 설명합니다. string형 배열과 숫자형 배열을 사용하여 다양한 예를 살펴보겠습니다.

배열의 MongoDB 집계 일치

우리는 이미 비교 연산자, $and/$or 연산자 및 $group/$project 단계와 함께 일치 집계 단계를 사용하는 방법을 배웠습니다. 여기에서 해당 기사를 찾을 수 있습니다.

여기에서는 일치하는 문서를 찾기 위해 배열에서 MongoDB 집계 일치를 학습하는 데 중점을 둡니다. 하나 이상의 필드에 배열이 포함된 컬렉션을 생성합니다.

아래 명령을 활용하여 우리를 따라갈 수 있습니다.

예제 코드:

db.createCollection('student_courses');
db.student_courses.insertMany([
    {"_id": "ma01", courses: ['Java', 'Python', 'Databases'], results: [3,5]},
    {"_id": "sd02", courses: ['Java', 'Python'], results: [6,3]},
    {"_id": "gh03", courses: ['JavaScript', 'Angular'], results: [8,9]},
    {"_id": "rt04", courses: ['Data Science', 'Python'], results: [2,5]}
]);
db.student_courses.find();

출력:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }

$in과 함께 $match를 사용하여 MongoDB의 배열에서 일치하는 문서 찾기

예제 코드:

db.student_courses.aggregate({
    $match:{
        $expr:{ $in: ['Java', "$courses"]}
    }
});

출력:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

이 코드 조각은 $match$expr과 함께 사용하여 쿼리 언어 내에서 집계 표현식을 사용할 수 있도록 합니다. 여기에서 $expr$match 단계에서 정확한 문서의 필드를 비교하는 쿼리 표현식을 작성합니다.

또한 $in 연산자는 courses 배열에 Java가 배열 요소로 포함된 문서를 선택합니다. 지정된 배열의 여러 값을 확인하려면 다음과 같은 방식으로 쿼리를 사용합니다.

예제 코드:

db.student_courses.aggregate({
    $match:{
        courses:{ $in: ['Java', 'Python']}
    }
});

출력:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }
{ "_id" : "rt04", "courses" : [ "Data Science", "Python" ], "results" : [ 2, 5 ] }

이 예에서는 courses 배열에 Java 또는 Python(또는 둘 다)이 있는 문서만 선택합니다. 마찬가지로 숫자 배열로 작업할 수 있습니다.

예제 코드:

db.student_courses.aggregate({
    $match:{
        results:{ $in: [3,6]}
    }
});

출력:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

이 쿼리는 results 배열에 3 또는 6(또는 둘 다)이 포함된 문서만 검색합니다.

예제 코드:

db.student_courses.aggregate({
    $match:{
       $expr:{ $gt: [{$sum: "$results"}, 10]}
    }
});

출력:

{ "_id" : "gh03", "courses" : [ "JavaScript", "Angular" ], "results" : [ 8, 9 ] }

여기에서 results 배열의 모든 요소의 합이 10보다 큰 문서만 선택합니다.

$match$eq와 함께 사용하여 MongoDB의 배열에서 일치하는 문서 찾기

예제 코드:

db.student_courses.aggregate({
    $match:{
        courses:{ $eq: ['Java', 'Python']}
    }
});

출력:

{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

여기서 $eq 연산자를 사용하여 $eq 연산자로 지정한 대로 courses 배열에 정확한 배열이 포함된 요소만 가져옵니다.

$all과 함께 $match를 사용하여 MongoDB의 배열에서 일치하는 문서 찾기

예제 코드:

db.student_courses.aggregate({
    $match:{
        courses:{ $all: ['Java', 'Python']}
    }
});

출력:

{ "_id" : "ma01", "courses" : [ "Java", "Python", "Databases" ], "results" : [ 3, 5 ] }
{ "_id" : "sd02", "courses" : [ "Java", "Python" ], "results" : [ 6, 3 ] }

$all$and 연산자와 동일합니다. 이 코드는 courses 배열에 $all 연산자에 대해 지정된 모든 요소가 포함된 모든 문서를 검색합니다.

결과 문서에는 JavaPython 요소가 포함되어야 합니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

관련 문장 - MongoDB Match