Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$split(集計)

項目一覧

  • 定義
  • 動作
$split

文字列を区切り文字に基づいて部分文字列の配列に分割します。$split は、区切り文字を削除し、結果の部分文字列を配列の要素として返します。文字列に区切り文字が見つからない場合、$split は元の文字列を配列の唯一の要素として返します。

$split には次の演算子式の構文があります。

{ $split: [ <string expression>, <delimiter> ] }
フィールド
タイプ
説明
string expression
string
分割する文字列。string expression は、文字列に変換される限り、任意の有効なにすることができます。式の詳細については、「式演算子」を参照してください。
delimiter
string
文字列 式を分割するときに使用する区切り記号。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(配列)の 2 つのフィールドを持つドキュメントが生成されます。$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 }
]

戻る

$sortArray

項目一覧