Docs Menu
Docs Home
/ / /
Rust ドライバー
/ / /

ドキュメントの挿入

項目一覧

  • Overview
  • _id フィールド
  • ドキュメントの挿入
  • insert_one の動作を変更する
  • 複数のドキュメントの挿入
  • insert_many の動作の変更
  • 順序付き動作の例
  • 詳細情報
  • API ドキュメント

このガイドでは、MongoDB コレクションにドキュメントを挿入する方法を学習できます。

MongoDB 内のドキュメントを検索、更新、削除する前に、それらを挿入する必要があります。 次の方法を使用して、ドキュメントを挿入できます。

  • insert_one() : 1 つのドキュメントを挿入する

  • insert_many() : 1 つ以上のドキュメントを挿入する

このガイドには、次のセクションが含まれています。

  • _id フィールドは、各ドキュメントに含まれる_idフィールドを記述します

  • 「ドキュメントの挿入」では、ドライバーを使用して単一のドキュメントをコレクションに挿入する方法について説明します。

  • 「複数のドキュメントの挿入」では、ドライバーを使用して複数のドキュメントをコレクションに挿入する方法について説明します。

  • 追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します

MongoDB コレクションでは、各ドキュメントに一意の_idフィールド値が含まれている必要があります。 ドライバーは、コレクションにデータを挿入すると、各ドキュメントに対して一意の 値をObjectId型として自動的に生成します。

カスタム値を設定する場合は、挿入操作に渡されるドキュメントの_idフィールドに値を割り当てられます。

重要

Duplicate _id Values

重複する_id値を含むドキュメントを挿入しようとすると、それらの値は一意のインデックス制約に違反し、書込み操作が失敗します。

_idフィールドの詳細については、サーバー マニュアルの「一意のインデックス」を参照してください。

ドキュメント構造とルールの詳細については、サーバー マニュアルのドキュメントを参照してください。

単一のドキュメントをコレクションに挿入するには、insert_one() メソッドを使用します。

挿入に成功すると、 メソッドは挿入されたドキュメントの_idを含むInsertOneResultインスタンスを返します。

次の例では、 insert_one()メソッドを使用してbooksコレクションにドキュメントを挿入しています。

let my_coll: Collection<Book> = client.database("db").collection("books");
let doc = Book { _id: 8, title: "Atonement".to_string(), author: "Ian McEwan".to_string() };
let insert_one_result = my_coll.insert_one(doc).await?;
println!("Inserted document with _id: {}", insert_one_result.inserted_id);
Inserted document with _id: 8

Tip

存在しないデータベースとコレクション

データベースとコレクションに対して書き込み操作を実行するときに、コレクションが存在しない場合、サーバーはそれらを自動的に作成します。

オプション ビルダー メソッドをinsert_one()に連鎖させることで、 insert_one()メソッドの動作を変更できます。 これらのオプション ビルダー メソッドはInsertOneOptions構造体フィールドを設定します。

注意

設定オプション

オプション ビルダのメソッドをinsert_one()メソッド呼び出しに直接連鎖させることで、 InsertOneOptionsフィールドを設定できます。 以前のバージョンのドライバーを使用している場合は、オプション ビルダのメソッドをbuilder()メソッドに連結してInsertOneOptionsインスタンスを構築する必要があります。 次に、オプション インスタンスをパラメーターとしてinsert_one()に渡します。

次の表では、 InsertOneOptionsで利用できるオプションについて説明しています。

オプション
説明
bypass_document_validation
If true, allows the driver to perform a write that violates document-level validation. To learn more about validation, see the guide on Schema Validation.

Type: bool
Default: false
write_concern
The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual.

Type: WriteConcern
comment
An arbitrary Bson value tied to the operation to trace it through the database profiler, currentOp, and logs. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Bson
Default: None

次のコードは、 bypass_document_validation()メソッドをinsert_one()メソッドに連結してbypass_document_validationフィールドを設定する方法を示しています。

let _result = my_coll.insert_one(doc)
.bypass_document_validation(true)
.await?;

複数のドキュメントをコレクションに挿入するには、insert_many() メソッドを使用します。

挿入に成功すると、 メソッドは挿入されたドキュメントの_id値を含むInsertManyResultインスタンスを返します。

次の例では、 insert_many()メソッドを使用して複数のドキュメントをbooksコレクションに挿入しています。

let docs = vec![
Book {
_id: 5,
title: "Cat's Cradle".to_string(),
author: "Kurt Vonnegut Jr.".to_string()
},
Book {
_id: 6,
title: "In Memory of Memory".to_string(),
author: "Maria Stepanova".to_string()
},
Book {
_id: 7,
title: "Pride and Prejudice".to_string(),
author: "Jane Austen".to_string()
}
];
let insert_many_result = my_coll.insert_many(docs).await?;
println!("Inserted documents with _ids:");
for (_key, value) in &insert_many_result.inserted_ids {
println!("{:?}", value);
}
Inserted documents with _ids:
Int32(5)
Int32(6)
Int32(7)

Tip

存在しないデータベースとコレクション

データベースとコレクションに対して書き込み操作を実行するときに、コレクションが存在しない場合、サーバーはそれらを自動的に作成します。

オプション ビルダー メソッドをinsert_many()に連鎖させることで、 insert_many()メソッドの動作を変更できます。 これらのオプション ビルダー メソッドはInsertManyOptions構造体フィールドを設定します。

次の表では、 InsertManyOptionsで利用できるオプションについて説明しています。

オプション
説明
bypass_document_validation
If true, allows the driver to perform a write that violates document-level validation. To learn more about validation, see the guide on Schema Validation.

Type: bool
Default: false
ordered
If true, when any insert fails, the operation returns without inserting the remaining documents. If false, even if an insert fails, the operation continues with the remaining writes. To learn more about ordered inserts, see the Ordered Behavior Example section of this guide.

Type: bool
Default: true
write_concern
The write concern for the operation. If you don't set this option, the operation inherits the write concern set for the collection. To learn more about write concerns, see Write Concern in the Server manual.

Type: WriteConcern
comment
An arbitrary Bson value tied to the operation to trace it through the database profiler, currentOp, and logs. This option is available only when connecting to MongoDB Server versions 4.4 and later.

Type: Bson
Default: None

次のコードは、 comment()メソッドをinsert_many()メソッドに連結してcommentフィールドを設定する方法を示しています。

let _result = my_coll.insert_many(docs)
.comment(Some("hello world".into()))
.await?;

たとえば、次のドキュメントをbooksコレクションに挿入するとします。

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }
{ "_id": 1, "title": "Blueberries for Sal" }
{ "_id": 3, "title": "Goodnight Moon" }

これらのドキュメントを挿入しようとすると、結果は、 ordered()オプション ビルダ メソッドに渡される 値によって異なります。

  • true (デフォルト値)の値を渡すと、ドライバは重複した_id値を持つドキュメントを挿入しようとするとBulkWriteErrorをスローします。 ただし、ドライバーはエラーが発生する前にドキュメントを挿入します。

  • falseの値を渡した場合でも、重複する_id値を持つドキュメントを挿入しようとしても、ドライバーはBulkWriteErrorをスローしますが、他のすべてのドキュメントが挿入されます。

次のコードは、順序なし書込み操作を実行して前述のドキュメントを挿入する方法を示しています。

let docs = vec![
Book { _id: 1, title: "Where the Wild Things Are".to_string(), author: "".to_string() },
Book { _id: 2, title: "The Very Hungry Caterpillar".to_string(), author: "".to_string() },
Book { _id: 1, title: "Blueberries for Sal".to_string(), author: "".to_string() },
Book { _id: 3, title: "Goodnight Moon".to_string(), author: "".to_string() }
];
my_coll.insert_many(docs).ordered(false).await?;

この操作の結果はBulkWriteErrorになりますが、 コレクション内のエラーが発生していないドキュメントを見つけることができます。

{ "_id": 1, "title": "Where the Wild Things Are" }
{ "_id": 2, "title": "The Very Hungry Caterpillar" }
{ "_id": 3, "title": "Goodnight Moon" }

挿入操作の実行可能な例については、次の使用例を参照してください。

このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。

戻る

書込み操作