我正在尝试使用字符串创建一个文档来查询 mongo 集合。
类似这样的事情
let query = r#"{ "_id": 3249883475987345844 }"#
let filter = Document::from_String(query);
let cursor = collection.find(filter).await;
我无法使用
doc!
宏,因为查询也是未知的。
let from_config = r#"{ "age": { "$gte": 20 } }"#
在 rust Bson 文档中,有一个方法
Document::from_reader
需要 Bson 字节流。但它并没有明确解释如何创建bson字节流。还有一个 RawDocumentBuf
可以转换为文档,但它也需要 bson 字节流。 Bson 还有一个方法 to_document
但它只返回一个文档(如果它本身已经是一个文档)。我开始觉得这是一个故意设计,不允许数据库受到攻击。
看起来
bson
不支持使用JSON语法从字符串反序列化,但它确实支持将任何serde
可序列化的对象序列化到文档中,并且serde_json
为我们提供了一个可以反序列化的类型(serde_json::Value
)通用 JSON 字符串并且也是可序列化的:
let query = r#"{ "_id": 3249883475987345844 }"#;
let filter = serde_json::from_str::<serde_json::Value>(query).expect("invalid BSON");
let filter = bson::to_document(&filter).expect("invalid BSON");