🔦
【Rust】MongoDBで配列内の特定の値だけnullに更新する実装
概要
MongoDBで配列内の値を更新するクエリはMongoDBで配列内の特定の値だけを更新するの記事で紹介されています。
今回はこの記事を参考にして、Rustで配列内の特定の値だけnullに更新する実装をしてみたのでメモ書きします。
前提
- 今回使用したrustcのバージョンは
1.78.0
、mongo-rust-driverのバージョンは2.8.2
です。
実装のポイント
- nullをどうやって設定するかという点について、bsonのドキュメントにあるNullのenumを使用します。
-
array_filters
に設定する実装として、UpdateOptionsを使用します。updateのクエリの際にこちらのoptionを設定します。
実装サンプル
サンプルとして、memo_list
という配列の特定のcategory_idだけnullにする実装は以下になります。
pub async fn detach_race_memo_category(
db: Database,
account_user_id: String,
to_null_category_id: String,
) -> Result<UpdateResult, Error> {
let collection = db.collection::<db_model::SampleInfo>(db_model::SAMPLE_INFO_COLLECTION);
// ドキュメントのフィルター
let filter_doc = doc! { "$and": [
doc! { "account_user_id": account_user_id.clone()},
]};
// nullに更新する
let set_doc = doc! {
"$set": doc! { "memo_list.$[element].category_id": Bson::Null }
};
// オプションに配列のフィルターをセット
let update_options = UpdateOptions::builder()
.array_filters(vec![doc! { "element.category_id": to_null_category_id.clone() }])
.build();
return collection
.update_many(filter_doc, set_doc, update_options)
.await;
}
Discussion