Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

$split (집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예시

버전 3.4에 새로 추가되었습니다.

$split

구분 기호를 기준으로 문자열을 하위 문자열 배열로 나눕니다. $split 은(는) 구분 기호를 제거하고 결과 하위 문자열을 배열 요소로 반환합니다. 문자열에서 구분 기호를 찾을 수 없으면 $split 원래 문자열을 배열의 유일한 요소로 반환합니다.

$split 연산자 표현식 구문은 다음과 같습니다.

{ $split: [ <string expression>, <delimiter> ] }
필드
유형
설명
string expression
문자열
분할할 문자열입니다. string expression 는 문자열로 해석되는 한 모든 유효한 표현식 일 수 있습니다. 표현식에 대한 자세한 내용은 표현식을 참조하세요 .
delimiter
문자열
문자열 표현식을 분할할 때 사용하는 구분자입니다. delimiter는 문자열로 해석되는 한 모든 유효한 표현식이 될 수 있습니다.

$split 연산자는 배열을 반환합니다. <string expression><delimiter> 입력은 모두 문자열이어야 합니다 그렇지 않으면 오류와 함께 작업이 실패합니다.

예시
결과
{ $split: [ "June-15-2013", "-" ] }
[ "June", "15", "2013" ]
{ $split: [ "banana split", "a" ] }
[ "b", "n", "n", " split" ]
{ $split: [ "Hello World", " " ] }
[ "Hello", "World" ]
{ $split: [ "astronomical", "astro" ] }
[ "", "nomical" ]
{ $split: [ "pea green boat", "owl" ] }
[ "pea green boat" ]
{ $split: [ "headphone jack", 7 ] }

메시지 오류:

"$split requires an expression that evaluates to a string as a second argument, found: double"

{ $split: [ "headphone jack", /jack/ ] }

메시지 오류:

"$split requires an expression that evaluates to a string as a second argument, found: regex"

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 }
]

돌아가기

$slice

이 페이지의 내용