如何在Rust中使用azure_data_cosmos检索文档?求示例指导
使用azure_data_cosmos检索并提取文档内容的示例
你的代码已经完成了客户端初始化和文档客户端的创建,但还需要处理异步请求的执行以及文档内容的提取。以下是完整的可运行示例:
1. 确保依赖配置
在Cargo.toml中添加必要依赖:
[dependencies] azure_data_cosmos = "0.20" # 建议使用最新版本 serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tokio = { version = "1.0", features = ["full"] }
2. 完整代码实现
use azure_data_cosmos::prelude::*; use serde::{Deserialize, Serialize}; use std::error::Error; // 根据你的实际文档结构定义结构体,字段需与文档JSON匹配 #[derive(Debug, Serialize, Deserialize)] struct MyDocument { id: String, permission: String, // 添加你的文档其他字段 } #[tokio::main] async fn main() -> Result<(), Box<dyn Error>> { // 替换为你的Cosmos资源信息 let account = "你的Cosmos账户名"; let primary_key = "你的账户主键"; let database_name = "目标数据库名"; let collection_name = "目标集合名"; // 初始化客户端 let authorization_token = AuthorizationToken::primary_key(&primary_key)?; let client = CosmosClient::new(account, authorization_token); let database_client = client.database_client(database_name); let collection_client = database_client.collection_client(collection_name); // 要检索的文档ID和分区键 let document_id = "my_doc_id"; let partition_key = "my_doc_permission"; // 创建文档客户端并执行检索请求 let document_client = collection_client.document_client(document_id, &partition_key)?; let response = document_client.get_document().await?; // 方式1:反序列化为自定义结构体(强类型) let retrieved_doc: MyDocument = response.document()?.clone(); println!("强类型文档内容: {:?}", retrieved_doc); // 方式2:反序列化为JSON Value(适配任意文档结构) let raw_doc: serde_json::Value = response.document()?.clone(); println!("原始JSON文档:\n{}", serde_json::to_string_pretty(&raw_doc)?); Ok(()) }
关键说明
get_document()是异步方法,必须在异步上下文(如tokio::main)中使用.await执行才能获取响应response.document()用于从响应中提取文档数据,通过clone()获取所有权后,可反序列化为自定义结构体或serde_json::Value- 避免使用
unwrap()处理错误,改用?传播错误,生产环境中可添加更具体的错误处理逻辑
内容的提问来源于stack exchange,提问作者Cyriel Lamerigts
相关产品推荐
相关产品推荐

