概要
MongoDBではドキュメントを更新する際に、ドキュメントの一部分だけを更新するupdate
とドキュメントを全て置き換えるreplace
の操作が用意されています。Rustのmongo-rust-driver
ではModify Documentsのドキュメントにある通り、両方の操作のメソッドが用意されています。今回はそれを試してみたのでメモ書きです。
前提
- 使用したrustcのバージョンは
1.77.0
です。 - 使用したmongo-rust-driverのバージョンは
2.8.2
です。
実装サンプル
ドキュメントの一部分だけ更新するupdate
の実装は以下のとおりです。
pub async fn update_sample(
db: Database,
sample_update_user: db_model::SampleUsers,
) -> Result<UpdateResult, Error> {
let collection = db.collection::<db_model::SampleUsers>(db_model::SAMPLE_USERS_COLLECTION);
# user_idでフィルタリングする
let filter = doc! { "user_id": sample_update_user.clone().user_id };
# nameとdescriptionの項目のみを更新する
let update_set = doc! {"$set": doc! { "name": sample_update_user.name, "description": sample_update_user.description }};
let update_one_result = collection.update_one(filter, update_set, None).await;
return update_one_result;
}
ドキュメントを置き換えて更新するreplace
の実装は以下のとおりです。
pub async fn replace_sample(
db: Database,
sample_replace_user: db_model::SampleUsers,
) -> Result<UpdateResult, Error> {
let collection = db.collection::<db_model::SampleUsers>(db_model::SAMPLE_USERS_COLLECTION);
# user_idでフィルタリングする
let filter = doc! { "user_id": sample_replace_user.clone().user_id };
# ドキュメントを置き換えて更新
let replace_result = collection.replace_one(filter, sample_replace_user, None).await;
return replace_result;
}