1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::Collection;
use futures::stream::TryStreamExt;
use mongodb::{
bson::{doc, oid::ObjectId},
error::Result,
};
use serde::de::DeserializeOwned;
use std::str::FromStr;
impl<T: DeserializeOwned + Unpin + Send + Sync> Collection<T> {
pub async fn get_many_by_id(&self, ids: &Vec<String>) -> Result<Vec<T>> {
let ids: Vec<ObjectId> = ids
.iter()
.map(|id| ObjectId::from_str(id).unwrap())
.collect();
let mut cursor = self
.collection
.find(
doc! {
"_id": {
"$in": ids
}
},
None,
)
.await?;
let mut items = Vec::new();
while let Some(item) = cursor.try_next().await? {
items.push(item);
}
Ok(items)
}
}