Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Write model strategy - optional upsert #142

Closed
PushUpek opened this issue Apr 16, 2024 · 4 comments
Closed

Write model strategy - optional upsert #142

PushUpek opened this issue Apr 16, 2024 · 4 comments
Assignees
Labels

Comments

@PushUpek
Copy link

I don't see any option that disable upsert in write model strategy. If I good see in source code this option is hardcoded. Is there any plans for make upsert optional?

@hpgrahsl hpgrahsl self-assigned this Apr 16, 2024
@hpgrahsl
Copy link
Owner

THX for your question @PushUpek!
As also mentioned in the documentation this is the standard behaviour regarding write models:

The default behaviour for the connector whenever documents are written to MongoDB collections is to make use of a proper ReplaceOneModel with upsert mode and create the filter document based on the _id field which results from applying the configured DocumentIdAdder in the value structure of the sink document.

May I ask what you would like to achieve and how you'd want this behaviour to be different? There is in fact already some flexibility when you look at the options you have according to the PostProcessor chain settings the DocumentIdAdder as well as more customized write models, all of which are briefly described in the README.

@PushUpek
Copy link
Author

I just want to update existing documents in collection without adding new one. I don't see option to do this with postprocessing.

@hpgrahsl
Copy link
Owner

hpgrahsl commented Apr 19, 2024

So what you'd like to have is that when a kafka record is read from a topic you want to only apply an update e.g. based on the _id field? If so I'd say this is a rather special use case and has never been requested since I launched this project many moons ago :)

There's primarily two reasons why this has not been implemented yet:

  1. Imagine you have an empty mongodb collection to begin with. Only trying to update something will never work, hence the collection will never receive any data.

  2. Even if you have existing documents in the collection, what would happen is that any kafka record that's read from the topic for which there is no matching mongodb document would be dropped / skipped, which again is typically not something people wanted to have in the past.

The bottom line is, if you really have this requirement you can always fork the project and add your own custom write model to it. This is the interface to implement https://github.com/hpgrahsl/kafka-connect-mongodb/blob/master/src/main/java/at/grahsl/kafka/connect/mongodb/writemodel/strategy/WriteModelStrategy.java

There are several examples in the project which you can look at to get some inspiration in this package https://github.com/hpgrahsl/kafka-connect-mongodb/tree/master/src/main/java/at/grahsl/kafka/connect/mongodb/writemodel/strategy

@hpgrahsl
Copy link
Owner

closing this due to PR suggested in upstream project here: mongodb/mongo-kafka#162

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants