Docs Menu
Docs Home
/ / /
Go Driver
/ / /

ドキュメントの変更

項目一覧

  • Overview
  • に関するメモ _id
  • Update
  • パラメーター
  • Return Values
  • 置換
  • パラメーター
  • Return Values
  • 詳細情報
  • API ドキュメント

このガイドでは、アップデート操作と置換操作を使用して MongoDB 内のドキュメントを変更する方法を学習できます。

更新操作では、指定したフィールドが変更されますが、他のフィールドと値は変更されません。 置き換え操作により、ドキュメント内の _idを除くすべての既存のフィールドが削除され、削除されたフィールドは指定した新しいフィールドと値に置き換えられます。

MongoDB では、ドキュメントを変更するためのすべての方法は同じパターンに従います。

メソッド署名の変更

注意

プレースホルダー

changeX はプレースホルダーであり、実際のメソッドではありません。

このパターンでは次のことが期待されています。

  • 変更する 1 つ以上のドキュメントに一致するクエリフィルターを指定します。

  • フィールドと値の変更を指定します。

  • メソッドの動作を変更する必要がある場合は、オプションを指定します。

ドライバーは、ドキュメントを変更するための次のメソッドを提供します。

  • UpdateByID()

  • UpdateOne()

  • UpdateMany()

  • ReplaceOne()

  • BulkWrite() (このガイドでは説明されていません)

  • FindOneAndUpdate() (このガイドでは説明されていません)

  • FindOneAndReplace() (このガイドでは説明されていません)

MongoDB コレクション内の各ドキュメントには、一意かつ不変の_idフィールドがあります。 _idフィールドを変更するには、アップデート操作と置換操作を使用できません。 このフィールドを変更しようとすると、アップデート メソッドと置換メソッドはWriteErrorを返します。

単一のドキュメントを更新するには、 UpdateOne()メソッドまたはUpdateByID()メソッドを使用します。

複数のドキュメントを更新するには、 UpdateMany()メソッドを使用します。

各メソッドは、少なくとも 1 つの更新演算子を含む更新ドキュメントを受け取ります。 更新演算子は、実行する更新のタイプを指定します。 更新ドキュメントには、変更を説明するフィールドと値も含まれます。 更新ドキュメントは、次の形式を使用します。

bson.D{{"<update operator>", bson.D{{"<field>", <value>},
{"<field>", <value>}, ... }},
{"<update operator>", ... }, ... }

更新演算子と説明を網羅したのリストについては、MongoDB サーバーのマニュアルを参照してください。

注意

更新操作における集計パイプライン

MongoDB Server バージョン4.2以降を使用している場合は、更新操作で 集計ステージ のサブセットで構成された集計パイプラインを使用できます。 MongoDB が集計パイプラインでサポートする集計ステージの詳細については、 集計パイプラインを使用して更新を実行するに関するチュートリアル を参照してください。

UpdateOne()UpdateByID()UpdateMany()は、操作が成功した場合、更新操作に関する情報を含むUpdateResultタイプを返します。 UpdateResult型には次のプロパティが含まれています。

プロパティ
説明
MatchedCount
フィルターに一致するドキュメントの数
ModifiedCount
操作によって変更されたドキュメントの数
UpsertedCount
操作によってアップサートされたドキュメントの数
UpsertedID
アップサートされたドキュメントの_id 、またはアップサートされたドキュメントがない場合はnil

UpdateOne()に渡されたクエリフィルターに一致するドキュメントが複数ある場合、メソッドは最初に一致したドキュメントを選択してアップデートします。 クエリフィルターに一致するドキュメントがない場合、アップデート操作では変更は行われません。

クエリフィルターに一致するドキュメントがない場合に新しいドキュメントを挿入する方法については、 アップサート ガイドをご覧ください。

次のドキュメントでは、従業員について説明しています。

{
"_id" : 2158,
"name" : "Mary Shelley",
"department" : "Marketing",
"role" : "Marketing Analyst",
"bonus" : 2500,
...
}

次の例では、 UpdateByID()メソッドを使用して次のことを行います。

  • _idの値が2158であるドキュメントを一致させます。

  • nameフィールドを「Mary Bearing Shelly」に設定し、 roleフィールドを「マーケティング ディレクトリ」に設定します。

  • bonusフィールドの値を2000ずつ増加させます。

filter := bson.D{{"_id", 2158}}
update := bson.D{{"$set", bson.D{{"name", "Mary Wollstonecraft Shelley"},
{"role", "Marketing Director"}}}, {"$inc", bson.D{{"bonus", 2000}}}}
result, err := collection.UpdateOne(context.TODO(), filter, update)
fmt.Printf("Documents matched: %v\n", result.MatchedCount)
fmt.Printf("Documents updated: %v\n", result.ModifiedCount)

以下は、前述の更新操作によって更新されたドキュメントを示しています。

{
"_id" : 2158,
"name" : "Mary Wollstonecraft Shelley",
"department" : "Marketing",
"role" : "Marketing Director",
"bonus" : 4500,
...
}

単一のドキュメントを置き換えるには、 ReplaceOne()メソッドを使用します。

ReplaceOne() は、既存のドキュメントの代わりに使用するドキュメントである置換ドキュメントを要求しています。 置換ドキュメントは以下の形式を使用します。

bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }

ReplaceOne() は、置換操作が成功した場合、置換操作に関する情報を含むUpdateResult型を返します。 UpdateResult型には次のプロパティが含まれています。

プロパティ
説明
MatchedCount
フィルターに一致するドキュメントの数
ModifiedCount
操作によって変更されたドキュメントの数
UpsertedCount
操作によってアップサートされたドキュメントの数
UpsertedID
アップサートされたドキュメントの_id 、またはアップサートされたドキュメントがない場合はnil

ReplaceOne()に渡されたクエリフィルターに一致するドキュメントが複数ある場合、メソッドは最初に一致したドキュメントを選択して置き換えます。 クエリフィルターに一致するドキュメントがない場合、置換操作は失敗します。

次のドキュメントでは、テーブル アイテムを説明しています。

{
"_id" : 2056,
"item" : "Mug",
"brand" : "Simply Ceramics",
"price" : 2.99,
"material" : "Glass"
}

次の例では、ReplaceOne() メソッドを使用して、このドキュメントを、値がitem "Cup" のquantity フィールドと値が の107 フィールドを含むドキュメントに置き換えます。

filter := bson.D{{"_id", 2056}}
replacement := bson.D{{"item", "Cup"}, {"quantity", 107}}
result, err := collection.ReplaceOne(context.TODO(), filter, replacement)
fmt.Printf("Documents matched: %v\n", result.MatchedCount)
fmt.Printf("Documents replaced: %v\n", result.ModifiedCount)

置換されたドキュメントには、次のように、置換ドキュメントの内容と不変の_idフィールドが含まれます。

{
"_id" : 2056,
"item" : "Cup",
"quantity" : 107
}

更新操作と置換操作の実行可能な例については、次の使用例を参照してください。

上記で説明されている操作の詳細については、次のガイドを参照してください。

配列要素の更新について詳しくは、「 ドキュメント内の配列を更新する 」を参照してください。

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

戻る

Delete Documents