Skip to content

Commit e0617b8

Browse files
committed
Fix mongoDB issues
1 parent bb51347 commit e0617b8

1 file changed

Lines changed: 10 additions & 11 deletions

File tree

crates/sources/src/providers/mongo.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -471,13 +471,14 @@ impl TableProvider for MongoTableProvider {
471471
let filter_doc = exprs_to_mongo_filter(&filters, &self.primary_key)?;
472472
let mut set_doc = Document::new();
473473
for (col, expr) in &assignments {
474+
if col == &self.primary_key {
475+
return Err(DataFusionError::Plan(format!(
476+
"Cannot modify primary key column '{}' — MongoDB disallows updating _id",
477+
self.primary_key
478+
)));
479+
}
474480
let value = expr_to_bson_value(expr)?;
475-
let key = if col == &self.primary_key {
476-
"_id".to_string()
477-
} else {
478-
col.clone()
479-
};
480-
set_doc.insert(key, value);
481+
set_doc.insert(col.clone(), value);
481482
}
482483
let update_doc = doc! { "$set": set_doc };
483484

@@ -1009,15 +1010,13 @@ fn exprs_to_mongo_filter(filters: &[Expr], primary_key: &str) -> DFResult<Docume
10091010
return Ok(doc! {});
10101011
}
10111012

1012-
let mut combined = Document::new();
1013+
let mut parts = Vec::with_capacity(filters.len());
10131014
for expr in filters {
10141015
match expr {
10151016
Expr::BinaryExpr(binary) => {
10161017
let part =
10171018
binary_expr_to_mongo(&binary.left, &binary.op, &binary.right, primary_key)?;
1018-
for (k, v) in part {
1019-
combined.insert(k, v);
1020-
}
1019+
parts.push(Bson::Document(part));
10211020
}
10221021
_ => {
10231022
return Err(DataFusionError::Plan(format!(
@@ -1027,7 +1026,7 @@ fn exprs_to_mongo_filter(filters: &[Expr], primary_key: &str) -> DFResult<Docume
10271026
}
10281027
}
10291028

1030-
Ok(combined)
1029+
Ok(doc! { "$and": parts })
10311030
}
10321031

10331032
/// The kind of DML operation to execute.

0 commit comments

Comments
 (0)