Overview
このガイドでは、 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マニュアル ドキュメント を参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。