$split (집계)
버전 3.4에 새로 추가되었습니다.
정의
$split
구분 기호를 기준으로 문자열을 하위 문자열 배열로 나눕니다.
$split
은(는) 구분 기호를 제거하고 결과 하위 문자열을 배열 요소로 반환합니다. 문자열에서 구분 기호를 찾을 수 없으면$split
원래 문자열을 배열의 유일한 요소로 반환합니다.$split
연산자 표현식 구문은 다음과 같습니다.{ $split: [ <string expression>, <delimiter> ] }
행동
$split
연산자는 배열을 반환합니다. <string expression>
및 <delimiter>
입력은 모두 문자열이어야 합니다 그렇지 않으면 오류와 함께 작업이 실패합니다.
예시 | 결과 | ||
---|---|---|---|
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
{ $split: [ "headphone jack", 7 ] } | 메시지 오류:
| ||
{ $split: [ "headphone jack", /jack/ ] } | 메시지 오류:
|
예시
deliveries
라는 이름의 컬렉션에 다음 문서가 포함되어 있습니다.
db.deliveries.insertMany( [ { _id: 1, city: "Berkeley, CA", qty: 648 }, { _id: 2, city: "Bend, OR", qty: 491 }, { _id: 3, city: "Kensington, CA", qty: 233 }, { _id: 4, city: "Eugene, OR", qty: 842 }, { _id: 5, city: "Reno, NV", qty: 655 }, { _id: 6, city: "Portland, OR", qty: 408 }, { _id: 7, city: "Sacramento, CA", qty: 574 } ] )
다음 집계 작업의 목적은 각 주에 대한 총 배송 수량을 찾고 목록을 내림차순으로 정렬하는 것입니다. 파이프라인 단계는 5단계로 구성되어 있습니다:
$project
단계에서는qty
(정수) 및city_state
(배열)이라는 두 개의 필드가 있는 문서를 생성합니다.$split
연산자는 쉼표 뒤에 공백 (", "
) 을 구분자로 사용하여city
필드를 분할하여 문자열 배열을 만듭니다.$unwind
단계는city_state
필드의 각 요소에 대해 별도의 레코드를 생성합니다.$match
단계에서는 정규 표현식을 사용하여 도시 문서를 필터링하고 상태가 포함된 문서만 남깁니다.$group
단계는 모든 상태를 함께 그룹화하고qty
필드를 합산합니다.$sort
단계는 결과를total_qty
기준으로 내림차순으로 정렬합니다.
db.deliveries.aggregate( [ { $project: { city_state: { $split: ["$city", ", "] }, qty: 1 } }, { $unwind: "$city_state" }, { $match: { city_state: /[A-Z]{2}/ } }, { $group: { _id: { state: "$city_state" }, total_qty: { $sum: "$qty" } } }, { $sort: { total_qty: -1 } } ] )
이 연산은 다음과 같은 결과를 반환합니다.
[ { _id: { state: "OR" }, total_qty: 1741 }, { _id: { state: "CA" }, total_qty: 1455 }, { _id: { state: "NV" }, total_qty: 655 } ]