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 default
insert_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 を渡すだけでインサートできるので便利ですね。
製品導入する場合は、タイムアウトなどを考慮しないといけないですかね…?
コメント