feat(mongodb): support generic runCommand execution

This commit is contained in:
Guoyu Su authored and GitHub committed 2026-08-12 21:05:13 +08:00
1 parent 2d00620fac
commit 9b24d962bb
27 files changed
+580 -18

No files matched your search

+1
View File
@@ -785,6 +785,7 @@ async fn main() {
.route("/mongo/distinct", post(routes::mongo::distinct))
.route("/mongo/create-index", post(routes::mongo::create_index))
.route("/mongo/create-user", post(routes::mongo::create_user))
.route("/mongo/run-command", post(routes::mongo::run_command))
.route("/mongo/drop-indexes", post(routes::mongo::drop_indexes))
.route("/mongo/insert-document", post(routes::mongo::insert_document))
.route("/mongo/insert-documents", post(routes::mongo::insert_documents))
+32
View File
@@ -209,6 +209,15 @@ pub struct MongoCreateUserRequest {
pub write_concern_json: Option<String>,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MongoRunCommandRequest {
pub connection_id: String,
pub database: String,
pub command_json: String,
pub execution_id: Option<String>,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MongoDropIndexesRequest {
@@ -674,6 +683,29 @@ pub async fn create_user(
Ok(Json(serde_json::json!({ "affected_rows": affected_rows })))
}
pub async fn run_command(
State(state): State<Arc<WebState>>,
headers: HeaderMap,
Json(req): Json<MongoRunCommandRequest>,
) -> Result<Json<serde_json::Value>, AppError> {
super::mcp_policy::ensure_dangerous_write(
&state,
&headers,
&req.connection_id,
&req.database,
"Run MongoDB command",
)
.await?;
ensure_writable(&state.app, &req.connection_id, "Run MongoDB command").await?;
let result = run_cancellable(
&state,
req.execution_id.clone(),
dbx_core::mongo_ops::mongo_run_command_core(&state.app, &req.connection_id, &req.database, &req.command_json),
)
.await?;
Ok(Json(serde_json::to_value(result).map_err(|e| AppError::from(e.to_string()))?))
}
pub async fn drop_indexes(
State(state): State<Arc<WebState>>,
headers: HeaderMap,