既存のMongoDBドキュメントにリストやオブジェクト型のフィールドを追加する方法
既存のMongoDBドキュメントに、オブジェクト型や配列(リスト)型など特定のデータ型を持つ新しいフィールドを追加したい場合、$set 演算子を使用します。$set は指定したフィールドが存在しない場合は新しく作成し、すでに存在する場合は値を更新してくれるため、フィールドの追加にも最適です。
1. コレクションとドキュメントの作成
まず、insertOne() メソッドを使ってサンプルのコレクションを作成します。
> db.demo732.insertOne({_id:1,Language:"English"});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo732.insertOne({_id:2,Language:"Hindi"});
{ "acknowledged" : true, "insertedId" : 2 }2. ドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo732.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : 1, "Language" : "English" }
{ "_id" : 2, "Language" : "Hindi" }3. $set を使ったフィールドの追加
ここで、既存のドキュメントに対して、オブジェクト型のフィールド「details」と、配列(リスト)型のフィールド「studentDetails」を同時に追加してみます。
> db.demo732.update({_id:1},
... { $set:{details:{'subjectName':"MongoDB"}, studentDetails:[{Name:"David"},{CountryName:"US"}]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果の WriteResult では、「nMatched : 1」が条件に一致したドキュメント数、「nModified : 1」が実際に更新されたドキュメント数を示しています。
4. 追加結果の確認
再度 find() メソッドを実行して、フィールドが正しく追加されたか確認します。
> db.demo732.find();
出力は次のようになります。
{ "_id" : 1, "Language" : "English", "details" : { "subjectName" : "MongoDB" }, "studentDetails" : [ { "Name" : "David" }, { "CountryName" : "US" } ] }
{ "_id" : 2, "Language" : "Hindi" }_id: 1 のドキュメントにのみ、オブジェクト型の「details」と配列型の「studentDetails」が追加されていることがわかります。このように $set 演算子を使えば、ネストされたオブジェクトや配列を含む任意のデータ型のフィールドを、既存ドキュメントに簡単に追加できます。
-
特定のフィールドが存在しないMongoDBドキュメントを取得する方法
MongoDBでは、$exists演算子を使用して特定のフィールドの有無を確認できます。ドキュメント内に目的のフィールドが存在しない場合、そのドキュメントをfind()やアグリゲーション(集計)パイプラインで取得して表示することが可能です。本記事では、配列内のサブドキュメントに特定のフィールド(例:Age)が含まれていないドキュメントを抽出する方法を、具体的なサンプルコードとともに解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。以下の例では、demo612というコレクションにドキュメントを挿入しています。> db.demo612.insertO
-
JavaでArrayListの指定した位置に要素を挿入する方法を解説
JavaのArrayListクラスに用意されているadd()メソッドを使うと、リストに要素を追加できます。このメソッドには、以下の2つのバリアント(オーバーロード)が存在します。add(E e) ― 引数としてオブジェクト(要素)を受け取り、その要素をリストの末尾に追加します。public void add(int index, E element) ― 挿入したい要素と、挿入位置を表す整数値(インデックス)を受け取ります。指定された位置に要素を挿入し、それまでその位置にあった要素や後続の要素はすべて右に1つずつシフトされます(インデックスが1つずつ増えます)。つまり、インデックスを引数に取る