ドキュメントの挿入
項目一覧
Overview
このガイドでは、MongoDB コレクションにドキュメントを挿入する方法を学習できます。
MongoDB でドキュメントを検索、更新、削除する前に、それらのドキュメントを挿入する必要があります。 メソッドを使用して 1 つのドキュメントを挿入することも、 メソッドまたはInsertOne()
InsertMany()
BulkWrite()
メソッドを使用して複数のドキュメントを挿入することもできます。
次のセクションでは、InsertOne()
と InsertMany()
に焦点を当てます。
_id
フィールド
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
の動作を変更する
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
の動作を変更する
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)
Ordered
動作
たとえば、次のドキュメントを挿入するとします。
{ "_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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。