배열의 MongoDB 집계 일치
- 배열의 MongoDB 집계 일치
-
$in
과 함께$match
를 사용하여 MongoDB의 배열에서 일치하는 문서 찾기 -
$match
를$eq
와 함께 사용하여 MongoDB의 배열에서 일치하는 문서 찾기 -
$all
과 함께$match
를 사용하여 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
연산자에 대해 지정된 모든 요소가 포함된 모든 문서를 검색합니다.
결과 문서에는 Java
및 Python
요소가 포함되어야 합니다.