我從檔案中獲取了代碼,但它不起作用。
pub fn get_countries(&self) {
let cursor = self.countries.find(None, None);
for doc in cursor {
println!("{}", doc?)
}
}
mongodb::sync::Cursor<bson::Document> doesn't implement std::fmt::Display
mongodb::sync::Cursor<bson::Document> cannot be formatted with the default formatter
the ? operator can only be applied to values that implement std::ops::Try
the ? operator cannot be applied to type mongodb::sync::Cursor<bson::Document>
cursor.collect() 也無法正常作業。
該方法
collect存在于 enumstd::result::Result<mongodb::sync::Cursor<bson::Document>, mongodb::error::Error>,但其特征界限不滿足
std::result::Result<mongodb::sync::Cursor<bson::Document>, mongodb::error::Error>由于不滿足的特征界限,無法呼叫方法
我嘗試使用 cursor.iter() 或 cursor.into_iter(),結果是一樣的
模塊的完整代碼
use bson::Document;
use mongodb::{
error::Error,
sync::{ Collection, Database},
};
pub struct Core {
db: Database,
countries: Collection<Document>,
}
impl Core {
pub fn new(db: &Database) -> Core {
Core {
db: db.clone(),
countries: db.collection("countries"),
}
}
pub fn get_country(&self, name: &String) -> Result<Option<Document>, Error> {
self.countries.find_one(bson::doc! { "idc": name }, None)
}
pub fn get_countries(&self) {
let cursor = self.countries.find(None, None);
for doc in cursor {
println!("{}", doc?)
}
}
}
uj5u.com熱心網友回復:
似乎該doc值正在回傳 a Cursor,所以我猜這cursor一定是Result<Cursor<T>>該方法回傳的型別Collection::find。https://docs.rs/mongodb/latest/mongodb/sync/struct.Collection.html#method.find
你不應該解開(或用適當的匹配處理結果)你的self.countries.find(None, None)結果嗎?
pub fn get_countries(&self) {
let cursor = self.countries.find(None, None).unwrap();
for doc in cursor {
println!("{}", doc?)
}
}
uj5u.com熱心網友回復:
我的解決方案
pub fn get_countries(&self) -> Vec<Document> {
let cursor = self.countries.find(None, None).unwrap();
let mut total: Vec<Document> = Vec::new();
for doc in cursor {
total.push(doc.unwrap());
}
total
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450664.html
