MongoDB insert() を使用したオブジェクトの配列と例

⚡ スマートサマリー

MongoDB insert() を使用したオブジェクトの配列では、複数のドキュメントを一度にコレクションに追加する方法を示します。従業員レコードの配列を格納し、ドキュメント内に配列を埋め込み、JSON の print 関数を使用して結果をきれいに表示します。

  • 📥 バルク挿入: insert() メソッドは、単一の効率的な操作で、ドキュメントの配列をコレクションに追加します。
  • 🧾 ドキュメントモデル: 各ドキュメントはフィールドと値のペアのセットであり、 MongoDB 一意の_idを自動的に追加します。
  • 🗂️ 埋め込み配列: 配列は、1 つのドキュメント内のフィールドとしても存在できます。ping 関連する価値観をまとめて。
  • 🔁 現代的な方法: insertOne() と insertMany() は、従来の insert() メソッドに代わる、より分かりやすい現在のメソッドです。
  • 🖨️ Readable 出力: forEach(printjson) コマンドは、すべてのドキュメントを、読みやすく整理された JSON 形式で出力します。

insert() メソッドとは何ですか MongoDB?

insert() メソッドは MongoDB コレクションに1つ以上のドキュメントを追加します。ドキュメントとは、JSONのバイナリ形式であるBSONに格納されたフィールドと値のペアのセットです。単一のドキュメントを渡すと、insert()関数はその1つのレコードを保存します。ドキュメントの配列を渡すと、すべてのドキュメントが1つの操作で保存されるため、1つずつ挿入するよりも高速です。

このメソッドは、db.collection.insert() というパターンを使用して特定のコレクションに対して実行されます。対象のコレクションがまだ存在しない場合、 MongoDB 最初の挿入時に自動的に作成されます。また、指定しない場合は各ドキュメントに一意の_idフィールドが割り当てられるため、後で各レコードを識別できます。

insert() はまだ機能しますが、新しい MongoDB バージョンによっては、より分かりやすい代替関数として insertOne() と insertMany() が提供されています。以下の例では、insert() を使用して従業員文書の配列を追加し、その結果を読みやすい JSON 形式で表示します。

ドキュメントの配列を追加する

「insert」コマンドを使用して、複数のドキュメントを一度にコレクションに挿入することもできます。 以下のコード例を使用して、一度に複数のドキュメントを挿入できます。

次の例は、これをどのように行うかを示しています。

ステップ1) 作る Javaスクリプト ドキュメントの配列を保持する myEmployee という変数

ステップ2) 必要なドキュメントをフィールド名と値とともに変数に追加します。

ステップ3) insert コマンドを使用して、ドキュメントの配列をコレクションに挿入します。

var myEmployee=
	[
		{
			"Employeeid" : 1,
			"EmployeeName" : "Smith"
		},
		{
			"Employeeid"   : 2,
			"EmployeeName" : "Mohan"
		},
		{
			"Employeeid"   : 3,
			"EmployeeName" : "Joe"
		},
	];

	db.Employee.insert(myEmployee);

コマンドが正常に実行されると、次の出力が表示されます。

MongoDB insert() を使用したオブジェクトの配列

出力には、これら 3 つのドキュメントがコレクションに追加されたことが示されています。

ドキュメント内に配列を挿入する方法

個別の文書の配列を挿入することに加えて、 MongoDB 配列を単一のドキュメント内のフィールドとして保存できます。これは、1 つのレコードに値のリストが自然に含まれる場合(複数のスキルを持つ従業員や複数のコースに登録している学生など)に便利です。 MongoDB 柔軟なドキュメントモデルを採用しており、配列は別のテーブルではなくオブジェクト内部に直接存在するため、関連データがまとめて保持されます。

次の例では、Skills という名前の配列フィールドを含む従業員ドキュメントを 1 つ挿入します。

db.Employee.insert(
   {
      "Employeeid" : 4,
      "EmployeeName" : "Alan",
      "Skills" : [ "MongoDB", "Node.js", "Express" ]
   }
);

この文書の各部分は、以下のように機能します。

  • 従業員ID (NAIST) と 従業員名 これらは通常のフィールドと値のペアです。
  • 性格 角括弧内に3つの文字列値を保持する配列フィールドです。
  • 埋め込み配列を含むドキュメント全体が、単一の挿入操作で格納されます。

レコードを追加した後、検索結果をJSON形式で出力する検索クエリを使用して、埋め込まれた配列を確認できます。

db.Employee.find( { "Employeeid" : 4 } ).forEach(printjson)

出力結果には、従業員ドキュメント内にネストされたSkills配列が表示されます。 Later$push演算子を使用して配列に新しい値を追加したり、インデックス位置で単一の要素を読み取ったりできます。このように関連する値を格納することで、各ドキュメントが自己完結型になり、コレクション間の結合の必要性が減り、データの読み取りと保守が容易になります。

insert() と insertOne() と insertMany() の比較

MongoDB データを追加するための3つの関連メソッドが用意されています。以下の表でそれらを比較し、最適なメソッドを選択してください。

方法 目的 例:
インサート() 単一のドキュメントまたはドキュメントの配列を追加する従来の方法。現在でも動作しますが、新しいドライバでは非推奨となっています。 db.Employee.insert(myEmployee)
insertOne() ドキュメントを1つだけ追加し、挿入されたドキュメントの_idを返します。単一レコードの場合に推奨されます。 db.Employee.insertOne({ … })
insertMany() 1回の呼び出しでドキュメントの配列を追加し、挿入されたすべての_idを返します。一括挿入に推奨されます。 db.Employee.insertMany([ { … }, { … } ])

新規プロジェクトでは、より明確な意図と優れたエラー報告が得られるinsertOne()とinsertMany()を使用してください。insert()メソッドは、主に古いチュートリアルやスクリプトとの後方互換性のために残されています。

JSON形式で印刷する

JSONの と呼ばれる形式です Javaスクリプトオブジェクト表記、情報を整理して読みやすい方法で保存する単なる方法です。 さらなる例では、JSON 印刷機能を使用して、より良い形式で出力を表示します。

JSON形式で印刷する例を見てみましょう

db.Employee.find().forEach(printjson)

Code 説明:

  1. 最初の変更点は、find() 関数に forEach() という関数を追加することです。これにより、コレクション内の各ドキュメントを明示的に走査するようになります。こうすることで、コレクション内の各ドキュメントに対して実行できる操作をより細かく制御できるようになります。
  2. 2 番目の変更は、printjson コマンドを forEach ステートメントに追加することです。これにより、コレクション内の各ドキュメントが JSON 形式で表示されます。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

JSON形式で印刷する

出力は、すべてのドキュメントが JSON スタイルで印刷されていることを明確に示しています。

よくあるご質問

はい。insert() にドキュメントの配列を渡すと、それらをすべて一度に挿入できます。この一括挿入は、ドキュメントごとに insert() を個別に呼び出すよりも高速ですが、現在では insertMany() が推奨される方法です。

はい。ドキュメントに_idフィールドが含まれていない場合、 MongoDB 挿入時に自動的に一意のObjectIdが生成されるため、保存されたすべてのレコードを識別して後で取得できます。

デフォルトでは、 MongoDB 順序付き挿入を実行します。指定された順序で文書を追加し、最初のエラーが発生した時点で停止し、残りの文書は挿入されません。orderedをfalseに設定すると、エラー後も処理が続行されます。

はい。AIツールは、平易な言葉で記述されたデータを、埋め込み配列を含むinsertOne()またはinsertMany()ステートメントに変換できます。データベースで実行する前に、生成されたフィールドとデータ型を必ず確認してください。

AIは、クエリパターンに基づいて、配列をドキュメント内に埋め込むべきか、別のコレクションを参照すべきかを提案できます。これにより、初心者でも不要な重複や過度に深いネストを避けながら、効率的にデータをモデリングできます。