[dependencies]
tokio = "1.20.0"
serde = { version = "1.0", features = ["derive"] }
[dependencies.mongodb]
version = "2.2.2"
default-features = false
features = ["tokio-runtime"]
use mongodb::bson::doc;
use mongodb::bson::oid::ObjectId;
use mongodb::Client;
use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[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 object_id = ObjectId::from_str("object id string");
if let Ok(oid) = object_id {
let filter = doc! {"_id": oid};
let result = collection.find_one(filter, None).await?;
if let Some(user) = result {
if let Some(id) = user.id {
println!("id: {}, name: {}", id, user.name);
}
}
}
Ok(())
}
NGな書き方
以下の書き方では、正しい結果が得られませんでした。
let filter = doc! {"_id": "object id string"};
let filter = doc! {"_id": {"$oid": "object id string"}};
コメント