From b2aed1f46ef5e0b9f8671ae40502adc86d03eda6 Mon Sep 17 00:00:00 2001 From: Renato Mefi Date: Fri, 16 Nov 2018 15:33:55 +0100 Subject: [PATCH] DBZ-987 Allow to processes full document updates --- .../transforms/UnwrapFromMongoDbEnvelope.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/transforms/UnwrapFromMongoDbEnvelope.java b/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/transforms/UnwrapFromMongoDbEnvelope.java index 122cdd882..5b3fc7c82 100644 --- a/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/transforms/UnwrapFromMongoDbEnvelope.java +++ b/debezium-connector-mongodb/src/main/java/io/debezium/connector/mongodb/transforms/UnwrapFromMongoDbEnvelope.java @@ -143,10 +143,6 @@ public R apply(R r) { if (patchRecord.value() != null) { document = BsonDocument.parse(patchRecord.value().toString()); - if (!document.containsKey("$set") && !document.containsKey("$unset")) { - throw new ConnectException("Unable to process Mongo Operation, a '$set' or '$unset' is necessary."); - } - valueDocument = new BsonDocument(); if (document.containsKey("$set")) { @@ -166,6 +162,17 @@ public R apply(R r) { } } + if (!document.containsKey("$set") && !document.containsKey("$unset")) { + if (!document.containsKey("_id")) { + throw new ConnectException("Unable to process Mongo Operation, a '$set' or '$unset' is necessary " + + "for partial update or '_id' is expected for full Document replaces."); + } + // In case of a full update we can use the whole Document as it is + // see https://docs.mongodb.com/manual/reference/method/db.collection.update/#replace-a-document-entirely + valueDocument = document; + valueDocument.remove("_id"); + } + if (!valueDocument.containsKey("id")) { valueDocument.append("id", keyDocument.get("id")); }