Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

ドキュメント内の配列の更新

このガイドでは、 Rustドライバーを使用してMongoDBドキュメント内の配列フィールドをアップデートする方法を学習できます。

ドキュメント内の配列を更新するには、更新演算子と位置演算子を使用できます。更新演算子は実行する更新のタイプを指定し、位置演算子はアップデートする配列要素を指定します。

このガイドの例では、 studentsコレクション内の次のサンプルドキュメントを使用します。

{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 62, 73] },
{ "_id": 2, "student": "Francesca Miao", "test_scores": [95, 45, 67] }

位置演算子 $ を使用して、クエリフィルターに一致する最初の配列要素を更新します。 $ 演算子は、配列内で一致する最初の要素の位置を表します。

次の例では、update_one() メソッドを使用して、test_scores 配列に値 62 が含まれるドキュメントを検索します。次に、この例では位置演算子 を使用して、最初に一致する要素を 62 から 65 に更新します。

let filter = doc! { "test_scores": 62 };
let update = doc! { "$set": { "test_scores.$": 65 } };
let res = my_coll
.update_one(filter, update)
.await?;
println!("Modified documents: {}", res.modified_count);
Modified documents: 1

次のドキュメントには、前述の更新操作によって発生した変更が反映されています。

{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 65, 73] }

配列フィールド内のすべての要素を更新するには、すべての位置演算子 $[] を使用します。 $[] 演算子は、配列内のすべての要素にアップデートが適用されることを示します。

次の例では、update_one() メソッドを使用して、studentフィールドの値が "Kai Ling" であるドキュメントを検索します。次に、この例ではすべての位置演算子を使用して、test_scores 配列内のすべての値を 5 ずつ増加させます。

let filter = doc! { "student": "Kai Ling" };
let update = doc! { "$inc": { "test_scores.$[]": 5 } };
let res = my_coll
.update_one(filter, update)
.await?;
println!("Modified documents: {}", res.modified_count);
Modified documents: 1

上記の更新操作では、次のようなドキュメントが生成されます。

{ "_id": 1, "student": "Kai Ling", "test_scores": [93, 67, 78] }

フィルタリングされた位置演算子$[<identifier>] を使用して、配列フィルターに一致するすべての配列要素を更新します。配列フィルターは、アップデートする配列要素を指定するドキュメントです。<identifier> を、配列フィルターで参照プレースホルダー名に設定します。

フィルタリングされた位置演算子を使用するには、array_filters() メソッドをアップデート メソッド呼び出しにチェーンし、フィルター ドキュメントの配列を渡します。

次の例では、update_many() メソッドを使用して、studentsコレクション内のすべてのドキュメントを検索しています。次に、この例ではフィルタリングされた位置演算子を使用して、70 より小さいすべての test_scores 値に 8 ポイントを追加します。

let filter = doc! {};
let update = doc! { "$inc": { "test_scores.$[score]": 8 } };
let res = my_coll
.update_many(filter, update)
.array_filters(vec![doc! { "score": { "$lt": 70 } }])
.await?;
println!("Modified documents: {}", res.modified_count);
Modified documents: 2

上記の更新操作では、次のようなドキュメントが生成されます。

{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 70, 73] },
{ "_id": 2, "student": "Francesca Miao", "test_scores": [95, 53, 75] }

このガイドの概念の詳細については、次のドキュメントを参照してください。

  • ドキュメントの更新ガイド

  • クエリ ガイドを指定する

このガイドで言及されている演算子の詳細については、次のMongoDB Serverマニュアル ドキュメント を参照してください。

  • $(更新演算子)

  • $[](更新演算子)

  • $[<identifier>] (更新演算子)

  • 配列更新演算子

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

戻る

ドキュメントの置換

項目一覧