kestra-io / plugin-mongodb

https://kestra.io/plugins/plugin-mongodb/
Apache License 2.0
4 stars 5 forks source link

Update flow example with $set gives error #4

Closed shrutimantri closed 1 month ago

shrutimantri commented 8 months ago

Expected Behavior

As per the example, I should be able to update a field of a document using $set, and use similar things like $addFields etc.

Actual Behaviour

The example of updating a document using $set as mentioned on this page is failing with the following error:

2024-01-27 13:59:50.601Field names in a replacement document can not start with '$' but '$addFields' does
2024-01-27 13:59:50.601java.lang.IllegalArgumentException: Field names in a replacement document can not start with '$' but '$addFields' does
    at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:535)
    at com.mongodb.internal.connection.BsonWriterDecorator.writeName(BsonWriterDecorator.java:196)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:117)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:42)
    at com.mongodb.internal.connection.SplittablePayload$WriteRequestEncoder.encode(SplittablePayload.java:216)
    at com.mongodb.internal.connection.SplittablePayload$WriteRequestEncoder.encode(SplittablePayload.java:182)
    at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
    at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
    at com.mongodb.internal.connection.BsonWriterHelper.writeDocument(BsonWriterHelper.java:77)
    at com.mongodb.internal.connection.BsonWriterHelper.writePayload(BsonWriterHelper.java:59)
    at com.mongodb.internal.connection.CommandMessage.encodeMessageBodyWithMetadata(CommandMessage.java:162)
    at com.mongodb.internal.connection.RequestMessage.encode(RequestMessage.java:136)
    at com.mongodb.internal.connection.CommandMessage.encode(CommandMessage.java:59)
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:353)
    at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:114)
    at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:643)
    at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:73)
    at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:204)
    at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:122)
    at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:87)
    at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:297)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.executeCommand(MixedBulkWriteOperation.java:393)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.executeBulkWriteBatch(MixedBulkWriteOperation.java:257)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.lambda$execute$0(MixedBulkWriteOperation.java:198)
    at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$0(OperationHelper.java:358)
    at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:383)
    at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$1(OperationHelper.java:357)
    at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:383)
    at com.mongodb.internal.operation.OperationHelper.withSourceAndConnection(OperationHelper.java:356)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.lambda$execute$1(MixedBulkWriteOperation.java:181)
    at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:67)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:202)
    at com.mongodb.internal.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:76)
    at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:206)
    at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:1024)
    at com.mongodb.client.internal.MongoCollectionImpl.executeReplaceOne(MongoCollectionImpl.java:572)
    at com.mongodb.client.internal.MongoCollectionImpl.replaceOne(MongoCollectionImpl.java:555)
    at com.mongodb.client.internal.MongoCollectionImpl.replaceOne(MongoCollectionImpl.java:550)
    at io.kestra.plugin.mongodb.Update.run(Update.java:102)
    at io.kestra.plugin.mongodb.Update.run(Update.java:23)
    at io.kestra.core.runners.Worker$WorkerThread.run(Worker.java:684)

Steps To Reproduce

  1. Have a MongoDB server with a collection and a couple of records.
  2. Try to update the field in one of the document in a similar fashion as shown in the flow example:
id: "update"
type: "io.kestra.plugin.mongodb.Update"
connection:
  uri: "mongodb://root:example@localhost:27017/?authSource=admin"
database: "my_database"
collection: "my_collection"
filter:
  _id:
    $oid: 60930c39a982931c20ef6cd6
document: "{"$set": { "tags": ["blue", "green", "red"]}}"

Environment Information

Example flow

id: "update"
type: "io.kestra.plugin.mongodb.Update"
connection:
  uri: "mongodb://root:example@localhost:27017/?authSource=admin"
database: "my_database"
collection: "my_collection"
filter:
  _id:
    $oid: 60930c39a982931c20ef6cd6
document: "{"$set": { "tags": ["blue", "green", "red"]}}"
anna-geller commented 1 month ago

Our engineer couldn't reproduce: "I wasn't able to reproduce any exceptions using the provided steps. However, I did notice that $addFields is not an update modifier but rather an aggregation stage, so this won't work in the Update task."