LoginSignup
0
0

【Rust】MongoDBでドキュメントを更新する際のUpdateとReplaceの使い分け

Posted at

概要

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;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0