mongodb - 如何通过r2d2和actix在MongoDB中保存文档?

标签 mongodb rust actix-web r2d2

我是Rust的新手,正尝试使用Actix-web创建Web服务器以通过MongoDB执行CRUD操作。我创建的第一个API是通过从POST请求接收到的东西将一个简单的文档保存在MongoDB中。发布请求处理程序函数的代码为:

extern crate r2d2;
extern crate r2d2_mongodb;

use r2d2::Pool;
use r2d2_mongodb::mongodb::db::ThreadedDatabase;
use r2d2_mongodb::{ConnectionOptions, MongodbConnectionManager};

use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder};
use bson::{doc, Bson, Document};

async fn post_request(info: web::Json<Info>, pool: web::Data<Pool<MongodbConnectionManager>>) -> HttpResponse {
    let name: &str = &info.name;
    let connection = pool.get().unwrap();
    let doc = doc! {
      "name": name
    };
    let result = connection.collection("user").insert_one(doc, None);
    HttpResponse::Ok().body(format!("username: {}", info.name))
}
我正在使用r2d2为MongoDB建立连接池,而不是打开和关闭连接。我得到的错误是
error[E0308]: mismatched types
  --> src/main.rs:17:59
   |
17 |     let result = connection.collection("user").insert_one(doc, None);
   |                                                           ^^^ expected struct `OrderedDocument`, found struct `bson::Document`
insert_one函数文档说它接受bson::Document,但是当我给它时,它说expected struct `r2d2_mongodb::mongodb::ordered::OrderedDocument`这是我的Cargo.toml依赖项
mongodb = "1.1.1"
actix-web = "3.3.2"
dotenv = "0.15.0"
r2d2-mongodb = "0.2.2"
r2d2 = "0.8.9"
serde = "1.0.118"
bson = "1.1.0"
我该如何纠正?

最佳答案

r2d2-mongodb crate marks it as已过时且不再受支持:

deprecated: official driver handles pooling internally


因此,我建议您不要使用它。您应该能够使用 r2d2 mongodb::Client 而不是mongodb::Database

错误的原因是Pool<MongodbConnectionManager>使用的是较旧版本的r2d2-mongodb(0.3),因此使用的是较旧版本的mongodb(0.13),它与您所使用的bson(1.1.0)的版本不兼容。 bson crate 本身也可能会遇到类似的兼容性问题。您可以通过降低依赖性来解决此问题:
mongodb = "0.3.0"
bson = "0.13.0"
但是,正如我以前提到的那样,我不建议这样做。

关于mongodb - 如何通过r2d2和actix在MongoDB中保存文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65379841/

相关文章:

php - mongodb:查找列的最高数值

rust - future 箱中的remote_handle是什么

assembly - Rust 组件 : how do I indicate that I need the value of the SP?

rust - 如何将无效的JSON请求正文中的错误描述返回给Rust中的客户端?

javascript - 在特快专递中提出 Mongoose 请求吗?

node.js - Mongoose 错误 : nesting Schemas

rust - 从向量获取特征对象引用

Rust actix-web : the trait `Handler<_, _>` is not implemented

rust - 我可以将值借到闭包中而不是移动它们吗?

java - MongoDB EC2 基准配置