MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBのアグリゲーションで部分文字列を取得する方法

MongoDBで文字列から部分文字列(サブストリング)を取得するには、$substr演算子を使用します。本記事では、実際にコレクションを作成し、アグリゲーションパイプラインの中で$substrを使って部分文字列を抽出する手順を、実行例とともにわかりやすく解説します。

サンプルコレクションの作成

まず、ドキュメントを格納するコレクションを作成しましょう。以下のコマンドで「demo176」というコレクションにデータを挿入します。

> db.demo176.insertOne({"ProductName":"PRODUCT-1"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3843a09e4f06af551997ef")
}
> db.demo176.insertOne({"ProductName":"PRODUCT-102"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3843a69e4f06af551997f0")
}
> db.demo176.insertOne({"ProductName":"PRODUCT-105"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3843aa9e4f06af551997f1")
}

登録済みドキュメントの確認

find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo176.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e3843a09e4f06af551997ef"), "ProductName" : "PRODUCT-1" }
{ "_id" : ObjectId("5e3843a69e4f06af551997f0"), "ProductName" : "PRODUCT-102" }
{ "_id" : ObjectId("5e3843aa9e4f06af551997f1"), "ProductName" : "PRODUCT-105" }

$substrを使って部分文字列を抽出する

続いて、MongoDBのaggregate()内で$substrを使用して部分文字列を取得するクエリを見ていきましょう。$substrは [ 対象フィールド, 開始位置, 抽出する文字数 ] の形式で指定します。以下の例では、先頭(0文字目)から7文字分を抽出しています。

> db.demo176.aggregate(
...  [
...     {
...        $project:
...           {
...
...              ProductName: { $substr: [ "$ProductName", 0, 7] }
...
...           }
...     }
...  ]
...)

このクエリを実行すると、「PRODUCT-」以降の番号部分が取り除かれ、各ドキュメントから「PRODUCT」という部分文字列だけが抽出されます。

{ "_id" : ObjectId("5e3843a09e4f06af551997ef"), "ProductName" : "PRODUCT" }
{ "_id" : ObjectId("5e3843a69e4f06af551997f0"), "ProductName" : "PRODUCT" }
{ "_id" : ObjectId("5e3843aa9e4f06af551997f1"), "ProductName" : "PRODUCT" }

補足:$substrと$substrCPの違い

MongoDB 3.4以降では、$substrは$substrCPのエイリアスとして動作し、コードポイント単位で文字列を処理します。日本語などのマルチバイト文字を含むデータを安全に切り出したい場合は、明示的に$substrCPを使用することを推奨します。また、バイト単位で抽出したい場合には$substrBytesを利用できます。用途に応じて適切な演算子を選択しましょう。

  1. MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法

    MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ...    { ...       Information:Student, ...   &

  2. MongoDBのaggregateで$groupを使って複数の集計結果を一度に取得する方法

    MongoDBでは、$facetと$groupを組み合わせることで、1回のaggregateクエリで複数の集計結果を同時に取得できます。この記事では、実際のコード例を通じてその方法を解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下のようにinsertOne()メソッドを使ってデータを挿入します。> db.demo765.insertOne( ... { ... Name:John, ... Category:ComputerScience, ... SubjectName:MongoDB,