MongoDBで配列の値を他のフィールドと連結するクエリの書き方
MongoDBで文字列を連結するには、$projectステージ内で$concat演算子を使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。
> db.demo359.insertOne(
... {
... Name1: "Chris",
... Name2: "David",
... Subjects: ["MySQL","MongoDB","Java"]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e5694cdf8647eb59e5620d0")
}コレクション内の全ドキュメントを表示する
find()メソッドを使用して、コレクション内のすべてのドキュメントを表示します。
> db.demo359.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e5694cdf8647eb59e5620d0"),
"Name1" : "Chris",
"Name2" : "David",
"Subjects" : [
"MySQL",
"MongoDB",
"Java"
]
}配列の値を他のフィールドと連結するクエリ
以下は、Subjects配列の値をName1フィールドと連結するための集計クエリです。まず$reduce演算子で配列の各要素をスペース区切りで結合し、その結果を$concatでName1フィールドと連結しています。
> db.demo359.aggregate([
... {
... $project: {
... values: {
... $reduce: {
... input: '$Subjects',
... initialValue: '',
... in: {
... $concat: ['$$value',' ','$$this']
... }
... }
... },
... Name1: 1
... }
... },
... {
... $project: {
... 'ConcatResult': { '$concat': [ '$Name1', '$values'] }
... }
... }
... ])
{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }このクエリを実行すると、次の出力が得られます。
{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }クエリの仕組み
この集計パイプラインは、2つの$projectステージで構成されています。
- 第1ステージ: $reduce演算子を使用して、Subjects配列の各要素($$this)を順番に取り出し、初期値である空文字列に対してスペースを挟みながら連結していきます。これにより、「MySQL MongoDB Java」という単一の文字列が生成されます。
- 第2ステージ: $concat演算子でName1フィールドの値「Chris」と、先ほど作成したvaluesフィールドを連結し、「ConcatResult」という新しいフィールドとして出力します。
最終的に、「Chris MySQL MongoDB Java」のように、名前と科目がひとつの文字列として連結された結果を取得できます。この手法は、配列データを可読性の高い形式に整形して表示したい場合などに非常に便利です。
-
【MongoDB】配列内の値を指定して一致するドキュメントを検索するクエリ
$in演算子とは配列フィールドに複数の候補値のいずれかが含まれるドキュメントを検索したい場合、MongoDBでは$in演算子を使用します。まずは、サンプルとなるドキュメントを挿入してコレクションを作成してみましょう。> db.demo511.insertOne({ListOfProject:[Library Management System,Hospital Management System]}); { acknowledged : true, insertedId : ObjectId(5e88473a987b6e0e9d18f585) } > db.demo51
-
MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法
MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id: