Docs Menu

Docs HomeGo

ドキュメントの挿入

項目一覧

  • Overview
  • _id フィールド
  • ドキュメントの挿入
  • InsertOne 動作を変更する
  • 複数のドキュメントの挿入
  • InsertMany 動作を変更する
  • Ordered 動作
  • 詳細情報
  • API ドキュメント

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

MongoDB でドキュメントを検索、更新、削除する前に、それらのドキュメントを挿入する必要があります。 メソッドを使用して 1 つのドキュメントを挿入することも、 メソッドまたはInsertOne() InsertMany()BulkWrite()メソッドを使用して複数のドキュメントを挿入することもできます。

次のセクションでは、InsertOne()InsertMany() に焦点を当てます。

MongoDB では、各ドキュメントにユニークな _id フィールドが含まれている必要があります。

このフィールドを管理するための 2 つのオプションは次のとおりです。

  • このフィールドは自分で管理し、使用する各値が一意であることを確認できます。

  • ドライバーが一意のObjectId値を自動的に生成できるようにします。 ドライバーは、 _idを明示的に指定していないドキュメントに対して一意のObjectId値を生成します。

一意性について強力な保証を提供しない限り、MongoDB ではドライバーに _id 値を自動的に生成させることをお勧めします。

注意

重複した _id 値はユニークインデックス制約に違反するため、ドライバーは WriteError を返します。

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

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

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

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

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

coll := client.Database("myDB").Collection("favorite_books")
doc := bson.D{{"title", "Invisible Cities"}, {"author", "Italo Calvino"}, {"year_published", 1974}}
result, err := coll.InsertOne(context.TODO(), doc)
fmt.Printf("Inserted document with _id: %v\n", result.InsertedID)

InsertOne()の動作を変更するには、オプションのInsertOneOptions構造体を作成して渡します。 InsertOneOptionsで調整できるオプションは次のとおりです。

オプション
説明
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false

次のように InsertOneOptions を構築します。

opts := options.InsertOne().SetBypassDocumentValidation(true)

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

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

次の例では、 InsertMany()メソッドを使用していくつかのドキュメントを作成し、 favorite_booksコレクションに挿入しています。

coll := client.Database("myDB").Collection("favorite_books")
docs := []interface{}{
bson.D{{"title", "My Brilliant Friend"}, {"author", "Elena Ferrante"}, {"year_published", 2012}},
bson.D{{"title", "Lucy"}, {"author", "Jamaica Kincaid"}, {"year_published", 2002}},
bson.D{{"title", "Cat's Cradle"}, {"author", "Kurt Vonnegut Jr."}, {"year_published", 1998}},
}
result, err := coll.InsertMany(context.TODO(), docs)
list_ids := result.InsertedIDs
fmt.Printf("Documents inserted: %v\n", len(list_ids))
for _, id := range list_ids {
fmt.Printf("Inserted document with _id: %v\n", id)
}

出力は次のようになります。

Documents inserted: 3
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")
Inserted document with _id: ObjectID("...")

InsertMany()の動作を変更するには、オプションのInsertOneOptions構造体を作成して渡します。 InsertOneOptionsで調整できるオプションは次のとおりです。

オプション
説明
BypassDocumentValidation
If true, allows the write to opt-out of document level validation.
Default: false
Ordered
If true, the driver sends documents to the server in the order provided. If an error occurs, the driver and server abort all remaining insert operations. To learn more, see Ordered Behavior.
Default: false

次のように InsertManyOptions を構築します。

opts := options.InsertMany().SetBypassDocumentValidation(true).SetOrdered(false)

たとえば、次のドキュメントを挿入するとします。

{ "_id": 1, "country": "Tanzania" }
{ "_id": 2, "country": "Lithuania" }
{ "_id": 1, "country": "Vietnam" }
{ "_id": 3, "country": "Argentina" }

これらのドキュメントをデフォルトの InsertManyOptions で挿入しようとすると、_id 値が繰り返されているために 3 番目のドキュメントで BulkWriteException が発生しますが、エラーが発生したドキュメントの前のドキュメントはコレクションに挿入されます。

注意

BulkWriteException が発生した場合でも、ドキュメントの挿入に成功したという確認を受け取ることができます。

docs := []interface{}{
bson.D{{"_id", 1}, {"country", "Tanzania"}},
bson.D{{"_id", 2}, {"country", "Lithuania"}},
bson.D{{"_id", 1}, {"country", "Vietnam"}},
bson.D{{"_id", 3}, {"country", "Argentina"}},
}
result, err := coll.InsertMany(context.TODO(), docs)
list_ids := result.InsertedIDs
if err != nil {
fmt.Printf("A bulk write error occurred, but %v documents were still inserted.\n", len(list_ids))
}
for _, id := range list_ids {
fmt.Printf("Inserted document with _id: %v\n", id)
}

コレクション内を確認すると、次のドキュメントが表示されます。

{ "_id": 1, "country": "Tanzania" }
{ "_id": 2, "country": "Lithuania" }

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

上記の操作の実行方法の詳細については、次のガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

←  書込み操作ドキュメントの削除 →
フィードバックを送る
© 2022 MongoDB, Inc.

会社概要

© 2022 MongoDB, Inc.