【问题标题】:How to save a document in MongoDB by r2d2 and actix?如何通过 r2d2 和 actix 在 MongoDB 中保存文档?
【发布时间】:2021-03-30 10:53:17
【问题描述】:

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

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"

我该如何纠正这个问题?

【问题讨论】:

  • @kmdreko 当然让我编辑问题。

标签: mongodb rust actix-web r2d2


【解决方案1】:

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

已弃用:官方驱动程序在内部处理池

所以我建议你不要使用它。您应该可以使用mongodb::Clientmongodb::Database 而不是Pool&lt;MongodbConnectionManager&gt;


错误的原因是r2d2-mongodb 使用旧版本的mongodb (0.3),因此旧版本的bson (0.13) 与您正在使用的bson 版本不兼容(1.1.0)。 mongodb crate 本身也可能存在类似的兼容性问题。您可以通过降低依赖项来修复它:

mongodb = "0.3.0"
bson = "0.13.0"

不过,正如我之前提到的,我不推荐它。

【讨论】:

  • 是的,我也在考虑。你能告诉我如何在mongodb rust驱动上建立连接池吗?
  • @Alonzo 您需要做的就是创建一个Client,它会自动进行池化。您可以关注mongodb crate 上的文档。
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 2015-12-01
  • 2020-01-28
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多