我正在一个基于MongoDB的API Web服务器上学习Rust,我不知道为什么我不能得到结果:
use mongodb::bson::{doc, oid::ObjectId};
use mongodb::{error::Error, Database};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
struct Job {
_id: ObjectId,
user_id: String,
organisation: String,
role: String,
}
async fn find_job_by_id(database: &Database, id: String) -> Result<Option<Job>, Error> {
database
.collection("jobs")
.find_one(Some(doc! { "_id": id }), None)
.await
}
我试着在每一步打印出id
,它看起来总是正确的,但.find_one()
总是返回Ok(None)
。有什么建议吗?
原来ObjectId
字段的筛选器必须专门使用ObjectId
。你不能像我在那里那样使用字符串来应用过滤器。这种方法就是修复它的原因:
let id = ObjectId::parse_str(id).unwrap();
看来这些神话是真的。。。经过型式检验,锈蚀相当严重。。。