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

MongoDBで2つのフィールドの文字列を連結して新しいフィールドに格納する方法

MongoDBでは、集計フレームワーク(Aggregation Framework)$project ステージと $concat 演算子を組み合わせることで、2つのフィールドの文字列を1つに連結し、新しいフィールドとして出力できます。

基本構文

db.yourCollectionName.aggregate(
    [
        { $project: { "yourNewFieldName": { $concat: [ "$yourFieldName1", " 区切り文字 ", "$yourFieldName2" ] } } }
    ]
);

$concat 演算子は、配列内に指定した複数の文字列を順番に結合します。区切り文字(スペースや「/」など)を間に挟むことも可能です。

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

まず、ドキュメントを含むコレクションを作成しましょう。ここでは学生の姓と名を別々のフィールドとして登録します。

> db.concatenateStringsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb7362d66697741252444")
}
> db.concatenateStringsDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb7402d66697741252445")
}
> db.concatenateStringsDemo.insertOne({"StudentFirstName":"Carol","StudentLastName":"Taylor"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb74c2d66697741252446")
}
> db.concatenateStringsDemo.insertOne({"StudentFirstName":"David","StudentLastName":"Miller"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb7752d66697741252447")
}
> db.concatenateStringsDemo.insertOne({"StudentFirstName":"James","StudentLastName":"Williams"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9bb7862d66697741252448")
}

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

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

> db.concatenateStringsDemo.find().pretty();

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

{
    "_id" : ObjectId("5c9bb7362d66697741252444"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Doe"
}
{
    "_id" : ObjectId("5c9bb7402d66697741252445"),
    "StudentFirstName" : "John",
    "StudentLastName" : "Smith"
}
{
    "_id" : ObjectId("5c9bb74c2d66697741252446"),
    "StudentFirstName" : "Carol",
    "StudentLastName" : "Taylor"
}
{
    "_id" : ObjectId("5c9bb7752d66697741252447"),
    "StudentFirstName" : "David",
    "StudentLastName" : "Miller"
}
{
    "_id" : ObjectId("5c9bb7862d66697741252448"),
    "StudentFirstName" : "James",
    "StudentLastName" : "Williams"
}

文字列を連結するクエリの実行

それでは、「StudentFirstName」と「StudentLastName」の2つのフィールドを連結し、新しいフィールド「StudentFullName」として出力するクエリを実行してみましょう。

> db.concatenateStringsDemo.aggregate(
... [
... { $project: { "StudentFullName": { $concat: [ "$StudentFirstName", " / ", "$StudentLastName" ] } } }
... ]
... );

実行結果

クエリを実行すると、以下のように氏名が連結された結果が出力されます。

{ "_id" : ObjectId("5c9bb7362d66697741252444"), "StudentFullName" : "John / Doe" }
{ "_id" : ObjectId("5c9bb7402d66697741252445"), "StudentFullName" : "John / Smith" }
{ "_id" : ObjectId("5c9bb74c2d66697741252446"), "StudentFullName" : "Carol / Taylor" }
{ "_id" : ObjectId("5c9bb7752d66697741252447"), "StudentFullName" : "David / Miller" }
{ "_id" : ObjectId("5c9bb7862d66697741252448"), "StudentFullName" : "James / Williams" }

補足ポイント

  • $project の挙動: $project で指定したフィールドのみが出力されます。元のフィールドも一緒に表示したい場合は、"StudentFirstName": 1 のように明示的に含めてください。
  • null値への注意: 連結対象のいずれかのフィールドが欠落しているか null の場合、$concat はエラーではなく null を返します。必要に応じて $ifNull 演算子と組み合わせてデフォルト値を設定すると安全です。
  • 永続化したい場合: 上記のクエリは読み取り時の変換です。データベースに実際に保存したい場合は、$merge$out ステージを追加するか、更新時には $set$concat を使ってフィールドを書き込めます。
  1. C#で2つの文字列を連結する方法【string.Concatメソッドの使い方】

    C#で2つの文字列を連結(結合)するには、String.Concatメソッドを使用します。このメソッドは、指定した複数の文字列をひとつにつなげた新しい文字列を返します。例えば、str1とstr2という2つの文字列変数を連結したい場合は、次のようにConcatメソッドの引数として渡します。string str3 = string.Concat(str1, str2);サンプルコード以下は、実際に2つの文字列「Brad」と「Pitt」を連結して表示するプログラムの例です。using System; class Program {    static void Mai

  2. Pythonで2つの文字列を連結する方法まとめ|+演算子・join()・format()などを解説

    文字列の連結(コンカティネーション)とは、2つ以上の文字列を1つに結合することを指します。例えば、「Tutorials」と「Point」という2つの文字列を連結すると「TutorialsPoint」という1つの文字列になります。 この記事では、Pythonで2つの文字列を連結するためのさまざまな方法を、コード例と実行結果とともにわかりやすく解説します。 1. 「+」演算子を使う方法 Pythonで最もシンプルな文字列連結の方法は、「+」演算子を使うことです。演算子を文字列の間に置くだけで結合でき、3つ以上の文字列の連結にも対応しています。 例 s1="Tutorials"