Rust の MongoDB ドライバーである mongodb を使って、ドキュメント登録処理を実装します。
MongoDBのコレクションにドキュメントを登録する
- insert_one:1件のドキュメントを登録する
- insert_many:複数のドキュメントを登録する
目次
MongoDB にインサート
MongoDB の設定
今回は以下のデータベースとコネクションを作成した前提で実装します。
- データベース:sample_db
- コレクション:users
Cargo.toml
mongodb クレートを使います。
[dependencies]
tokio = "1.20.0"
serde = { version = "1.0", features = ["derive"] }
[dependencies.mongodb]
version = "2.2.2"
default-features = false
features = ["tokio-runtime"]insert_one
insert_one で1件のドキュメントを登録します。
use mongodb::{Client};
use mongodb::bson::oid::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize)]
struct User {
    #[serde(rename = "_id", skip_serializing)]
    id: Option<ObjectId>,
    name: String,
}
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
    let client = Client::with_uri_str("your connection url string").await?;
    let db = client.database("sample_db");
    let collection = db.collection::<User>("users");
    let new_user = User {
        id: None,
        name: "Patricia Lebsack".to_string()
    };
    let result = collection.insert_one(new_user, None).await?;
    println!("{:?}", result.inserted_id);
    Ok(())
}
以下の警告が出ますが、今回はスルーします。
warning: field is never read: `id`
 --> src/main.rs:8:5
  |
8 |     id: Option<ObjectId>,
  |     ^^^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` on by defaultinsert_many
insert_many を使い、複数のドキュメントを登録します。
use mongodb::{Client};
use mongodb::bson::oid::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize)]
struct User {
    #[serde(rename = "_id", skip_serializing)]
    id: Option<ObjectId>,
    name: String,
}
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
    let client = Client::with_uri_str("your connection url string").await?;
    let db = client.database("sample_db");
    let collection = db.collection::<User>("users");
    let users = vec![
        User {
            id: None,
            name: "Leanne Graham".to_string()
        },
        User {
            id: None,
            name: "Ervin Howell".to_string()
        }
    ];
    let result = collection.insert_many(users, None).await?;
    println!("{:?}", result.inserted_ids);
    Ok(())
}以下の警告が出ますが、今回はスルーします。
warning: field is never read: `id`
 --> src/main.rs:8:5
  |
8 |     id: Option<ObjectId>,
  |     ^^^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(dead_code)]` on by defaultまとめ
Rust で MongoDB にドキュメントを登録する処理を簡単に実装してみました。
insert_many は Vec を渡すだけでインサートできるので便利ですね。
製品導入する場合は、タイムアウトなどを考慮しないといけないですかね…?



コメント