MongoDBの集計パイプラインで整数の配列を連結する方法
MongoDBのaggregate()メソッドで整数の配列を連結(文字列として結合)するには、演算子 $concat を活用します。本記事では、実際のコレクションを作成しながら、具体的な手順を順番に解説していきます。
1. サンプルコレクションの作成
まずはドキュメントを含むコレクションを作成しましょう。ここでは insertOne() を使って、IDのリストを持つドキュメントを挿入します。
> db.demo377.insertOne({"ListOfIds":[1001,1002,1003,1004,1005,1006,1007]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e5a73462ae06a1609a00b0e")
}2. 挿入したドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo377.find().pretty();
上記のコマンドを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e5a73462ae06a1609a00b0e"),
"ListOfIds" : [
1001,
1002,
1003,
1004,
1005,
1006,
1007
]
}3. 集計パイプラインで配列を連結するクエリ
ここからが本題です。集計パイプライン内で整数の配列を連結するには、$reduce で各要素を順に処理し、$concat で文字列として結合します。さらに $substrCP と $strLenCP を組み合わせることで、先頭に付いた余分な区切り文字を取り除いています。
> db.demo377.aggregate([
... { "$project": {
... "ListOfIds": {
... "$let": {
... "vars": {
... "key": {
... "$reduce": {
... "input": "$ListOfIds",
... "initialValue": "",
... "in": { "$concat": ["$$value", "++", { "$toLower": "$$this" }] }
... }
... }
... },
... "in": { "$substrCP": ["$$key", 2, { "$strLenCP": "$$key" }] }
... }
... }
... }}
... ])4. 実行結果
このクエリを実行すると、以下のように各要素が「++」で連結された単一の文字列が出力されます。
{ "_id" : ObjectId("5e5a73462ae06a1609a00b0e"), "ListOfIds" : "1001++1002++1003++1004++1005++1006++1007" }ポイントのまとめ
- $reduce: 配列の各要素を反復処理し、結果を蓄積していくための演算子です。
- $concat: 複数の文字列を連結します。数値はそのまま扱えないため、文字列への変換が必要です。
- $substrCP / $strLenCP: 先頭の区切り文字(この例では「++」)を除去するために使用しています。
このテクニックを応用すれば、任意の区切り文字を使った配列の文字列化や、より複雑なデータ整形も柔軟に実現できます。ぜひ実際のプロジェクトでも試してみてください。
-
MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説
MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic
-
MongoDBアグリゲーションで配列内の要素サブセットを合計する方法
MongoDBのアグリゲーションパイプラインを使用して、配列内の一部の要素(サブセット)を合計したい場合があります。そんなときは、$first演算子と$sum演算子を組み合わせることで実現できます。この記事では、実際のコレクションを作成しながら、具体的な手順をサンプルコード付きでわかりやすく解説します。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下の例では、数値の配列「Values」を持つドキュメントをinsertOne()メソッドで挿入しています。> db.demo610.insertOne({Values:[10,20,30,40,50]}