Mike,
   Did you get a chance to check this out at all?

Thanks,
Ryan

On Mon, Jul 9, 2018 at 3:31 PM Ryan Hendrickson <
[email protected]> wrote:

> Mike,
>    No, I'm just using the Mongo shell example as two things: (1) Something
> that can already be done, (2) Something that can be done a little better,
> IMO.
>
>    It can already be done if you pass in a JSON document, such as:
>
> NiFi FlowFile Content: {$set: {"field1":"anything"}}
> NiFi Processors Properties:
>   Mode: update
>   Update Query: {"id":"${id}"}
>   Update Mode: With operators enabled <-- looks in the FlowFile Content
> for those operators
>
>    In my above email, I'm suggesting an alternative way it could be done
> with just NiFi Processor Properties.
>
> Thanks for looking into it,
> Ryan
>
>
> On Mon, Jul 9, 2018 at 3:24 PM Mike Thomsen <[email protected]>
> wrote:
>
>> Ryan,
>>
>> I thought we were headed back down the path of the Mongo shell vs Mongo
>> driver API discussion, if not my apologies and carry on. I'll try to find
>> some time to kick the tires on EL behavior.
>>
>>
>>
>> On Mon, Jul 9, 2018 at 3:18 PM Ryan Hendrickson <
>> [email protected]> wrote:
>>
>>> Mike,
>>>    You that works right now if you pass in a flowfile, right?
>>>
>>> Ryan
>>>
>>> On Mon, Jul 9, 2018 at 3:17 PM Mike Thomsen <[email protected]>
>>> wrote:
>>>
>>>> Ryan,
>>>>
>>>> As I mentioned earlier in the thread, this:
>>>>
>>>> > {"id":"${id}", $set: {"field1":"anything"}
>>>>
>>>> is not supported by Mongo's Java driver based on my reading of the
>>>> javadocs. All of the update and replace functions require two separate
>>>> documents to be passed to them. If you can point me to an official Mongo
>>>> API that supports that, I'll be happy to take a look at it as a possible
>>>> feature for 1.8.
>>>>
>>>> Thanks,
>>>>
>>>> Mike
>>>>
>>>> On Mon, Jul 9, 2018 at 3:01 PM Ryan Hendrickson <
>>>> [email protected]> wrote:
>>>>
>>>>> I'm not sure what the right answer here is to implement something,
>>>>> especially thinking about the bigger picture of the Mongo processors.  
>>>>> What
>>>>> appears to me to be a clear need, is to set specific fields, without the
>>>>> document being passed in requiring specific MongoDB syntax in it.  There
>>>>> must be a more flexible solution possible that can both continue to use
>>>>> Mongo Operators and also use NiFi Expression Language.
>>>>>
>>>>> I could imagine a drop-down combo box in the UI that asks which Mongo
>>>>> Operator you'd like to use: $set, $unset, etc., then a text field
>>>>> supporting Expression Language for the JSON values.
>>>>>
>>>>> Example of: {"id":"${id}", $set: {"field1":"anything"}, would be
>>>>> expressed in the UI as:
>>>>>
>>>>>   Mode: update
>>>>>   Update Query: {"id":"${id}"}
>>>>>   Mongo Operator: $set  (from DropDown)
>>>>>   Operator Update Values: {"field1":"anything"}
>>>>>   Update Mode: With operators enabled
>>>>>
>>>>> As an aside, the team's had some discussions on whether or not the
>>>>> MongoURI should be set as a sensitive value since it contains the password
>>>>> in there, or break out the password to be a separate sensitive field.
>>>>>
>>>>> Going back to Andy's suggestion, that sounds great, but it doesn't
>>>>> keep my initial JSON document I need later in the flow.  I could split the
>>>>> FlowFiles using an empty UpdateAttribute, and then do that, although it's 
>>>>> a
>>>>> lot of hoops to jump through.
>>>>>
>>>>> Thanks,
>>>>> Ryan
>>>>>
>>>>> On Thu, Jun 28, 2018 at 11:19 AM Mike Thomsen <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> There's also a (can't remember the name) processor or two that
>>>>>> generates SQL operations. Something like that for Mongo would be
>>>>>> appropriate. The question is how to approach that because you might want 
>>>>>> to
>>>>>> do multiple operations in the same query. Expressing that in the 
>>>>>> processor
>>>>>> UI could non-intuitive. At first glance, I would suggest a many-to-one
>>>>>> mapping with dynamic properties. Something like this:
>>>>>>
>>>>>> customID => $set
>>>>>> logins => $inc
>>>>>> bad_logins => $inc
>>>>>> some_field => $unset
>>>>>>
>>>>>> We couldn't support EL there because it would break $set because in
>>>>>> this case customID should mean "fetch attribute customID and $set its
>>>>>> value" so ${customID} just drops the value into the field and sets 
>>>>>> null(?)
>>>>>> as the value.
>>>>>>
>>>>>> Doing a JSON builder for the body is probably not necessary just due
>>>>>> to the fact that we already have good ways to read the JSON and do it
>>>>>> manually (Jolt and ExecuteScript as examples).
>>>>>>
>>>>>> Thoughts?
>>>>>>
>>>>>> On Thu, Jun 28, 2018 at 10:17 AM Otto Fowler <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> So you want to set state not data.
>>>>>>>
>>>>>>>
>>>>>>> On June 27, 2018 at 23:32:48, Ryan Hendrickson (
>>>>>>> [email protected]) wrote:
>>>>>>>
>>>>>>> What we've got is a bunch of custom NiFi processors that are
>>>>>>> processing data.  As the data is processed, we currently use Spring to 
>>>>>>> load
>>>>>>> up a DAO to access Mongo and annotate the file is complete.  Then we 
>>>>>>> send
>>>>>>> the content to ElasticSearch.  As it turns out, we can simplify our 
>>>>>>> process
>>>>>>> quite a bit by using standard processors instead of our custom ones, so
>>>>>>> we're trying to pull out the Mongo updates from occurring.  We've 
>>>>>>> already
>>>>>>> got it setup to be flow-scoped with Expression Language to define the
>>>>>>> collection and query id, but not the actual update itself.  We want to 
>>>>>>> be
>>>>>>> able to dynamically set different fields on the update based on NiFi
>>>>>>> attributes, like ${progress}, ${priority}, etc.
>>>>>>>
>>>>>>> The issue I'm having isn't that I need to extract JSON from the
>>>>>>> FlowFile Content into an attribute, it's that the FlowFile Attribute 
>>>>>>> values
>>>>>>> need to be stored in Mongo - which in the current implementation, 
>>>>>>> updates
>>>>>>> to Mongo appear to only be possible from the FlowFile Content read in.
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Jun 27, 2018 at 11:10 PM Andy LoPresto <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Ryan,
>>>>>>>>
>>>>>>>> I believe what you are describing as the current behavior is
>>>>>>>> accurate. I don’t quite follow your request to allow a property on the
>>>>>>>> processor to define the content that gets used in the query, as that 
>>>>>>>> seems
>>>>>>>> like it would be fairly static. However, I am not in the key 
>>>>>>>> demographic
>>>>>>>> for the Mongo processors (as in, I only stand it up to review someone’s
>>>>>>>> PR). In general, NiFi processor properties are designed to be 
>>>>>>>> “flow-scoped”
>>>>>>>> rather than “single iteration of an operation-scoped” — i.e. flowfiles 
>>>>>>>> are
>>>>>>>> flowing through processors and each respective operation is performed 
>>>>>>>> given
>>>>>>>> the context at the time, rather than a job scheduling or “one-time
>>>>>>>> activity” tool. Maybe that’s where the disconnect is if your request is
>>>>>>>> more along those lines.
>>>>>>>>
>>>>>>>> The Update Query property does support NiFi Expression Language
>>>>>>>> though, so you could set that property value to be “${update_query}” 
>>>>>>>> and
>>>>>>>> ensure that the update_query attribute is set on incoming flowfiles. 
>>>>>>>> For
>>>>>>>> each flowfile, the operation would occur with that dynamic query. You 
>>>>>>>> could
>>>>>>>> use the EvaluateJsonPath processor preceding this to extract JSON
>>>>>>>> components from flowfile content into an attribute.
>>>>>>>>
>>>>>>>> If you need an immediate fix, you can use the GenerateFlowFile
>>>>>>>> processor to generate a flowfile which has the static content you’re
>>>>>>>> looking for, and pass that to the PutMongo processor.
>>>>>>>>
>>>>>>>>
>>>>>>>> Andy LoPresto
>>>>>>>> [email protected]
>>>>>>>> *[email protected] <[email protected]>*
>>>>>>>> PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4  BACE 3C6E F65B 2F7D EF69
>>>>>>>>
>>>>>>>> On Jun 27, 2018, at 7:45 PM, Ryan Hendrickson <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>> I think something must be getting lost in my email.  The $set
>>>>>>>> operator does work.  I tested it today, however, the NiFi processor
>>>>>>>> requires that input to be passed in as FlowFile.  I'm recommending is 
>>>>>>>> that
>>>>>>>> instead of using the FlowFile Content as the doc that updates the db,
>>>>>>>> alternatively, it could be a NiFi Property that's set.
>>>>>>>>
>>>>>>>> Check out the following key lines..
>>>>>>>>
>>>>>>>> https://github.com/apache/nifi/blob/rel/nifi-1.6.0/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java
>>>>>>>>
>>>>>>>> Line 197            session.read(flowFile, in ->
>>>>>>>> StreamUtils.fillBuffer(in, content, true));
>>>>>>>> Line 200            final Object doc = (mode.equals(MODE_INSERT) ||
>>>>>>>> (mode.equals(MODE_UPDATE) && 
>>>>>>>> updateMode.equals(UPDATE_WITH_DOC.getValue())))
>>>>>>>> Line 201                    ? Document.parse(new String(content,
>>>>>>>> charset)) : JSON.parse(new String(content, charset));
>>>>>>>> Line 223             BasicDBObject update = (BasicDBObject)doc;
>>>>>>>> Line 225             collection.updateOne(query, update, new
>>>>>>>> UpdateOptions().upsert(upsert));
>>>>>>>>
>>>>>>>> So on Line 223, if I'm reading this right, instead of using the
>>>>>>>> doc, which is the FlowFile content, just grab the update portion of the
>>>>>>>> syntax, expressed as a NiFi Property UPDATE ( {"$set":
>>>>>>>> {"status":"Stage_2"}} ), such
>>>>>>>> as: context.getProperty(UPDATE).getValue(), and cast that to 
>>>>>>>> BasicDBObject,
>>>>>>>> instead of doc.
>>>>>>>>
>>>>>>>> Does that describe a little better what I mean?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Jun 27, 2018 at 7:37 PM Mike Thomsen <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Ryan,
>>>>>>>>>
>>>>>>>>> FWIW, Mongo's own Java client doesn't work like that. See the
>>>>>>>>> update methods it exposes here:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> http://api.mongodb.com/java/current/com/mongodb/client/MongoCollection.html#findOneAndUpdate-org.bson.conversions.Bson-org.bson.conversions.Bson-
>>>>>>>>>
>>>>>>>>> The single parameter update() method doesn't exist on
>>>>>>>>> MongoCollection.
>>>>>>>>>
>>>>>>>>> It can be pretty tricky going back and forth between the Mongo
>>>>>>>>> shell and the client APIs.
>>>>>>>>>
>>>>>>>>> On Wed, Jun 27, 2018 at 5:31 PM Ryan Hendrickson <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Mike, Matt,
>>>>>>>>>>    Thanks for the help.  Mike - the one json thing was a typo.
>>>>>>>>>>
>>>>>>>>>>    I just got this working as the following:
>>>>>>>>>>
>>>>>>>>>> File on disk, testQuery.json: {"$set":{"status":"Stage_2"}}
>>>>>>>>>> GetFile ----FlowFile---> PutMongo
>>>>>>>>>>
>>>>>>>>>> NiFi Processor Properties:
>>>>>>>>>>    Mode: update
>>>>>>>>>>    Upsert: false
>>>>>>>>>>    Update Query Key: No value set
>>>>>>>>>>    Update Query: {"customId":"abc"}
>>>>>>>>>>    Update Mode: With operators enabled
>>>>>>>>>>
>>>>>>>>>>   This feels like a pretty contrived example here that got it
>>>>>>>>>> working.  I'm not aware of any of the current processors that output 
>>>>>>>>>> with
>>>>>>>>>> the Mongo Operators in a JSON file, which would mean if I'm 
>>>>>>>>>> operating on
>>>>>>>>>> straight JSON, I'd have to manipulate it in some way to get that in 
>>>>>>>>>> there.
>>>>>>>>>> That seems fairly complicated.  Is there a simpler way to do
>>>>>>>>>> this and I'm missing it?
>>>>>>>>>>
>>>>>>>>>> Just some background --
>>>>>>>>>> What I'm trying to do:
>>>>>>>>>>    I have the ID of a record in the database, and I only want to
>>>>>>>>>> update 1 field.  I could take the ID and do a GetMongo -> 
>>>>>>>>>> JoltTransform ->
>>>>>>>>>> PutMongo and replace the entire document, but that seems like a lot 
>>>>>>>>>> of
>>>>>>>>>> processors for this use-case.
>>>>>>>>>>
>>>>>>>>>> My initial approach/recommendation:
>>>>>>>>>>    I initially thought the Update Query property would take what
>>>>>>>>>> Mongo's CLI is expecting {"customId":{"$customId"},{"$set":
>>>>>>>>>> {"status":"Stage_2"}}.  Instead, it works by splitting on the comma 
>>>>>>>>>> - (1)
>>>>>>>>>> Query as Property, (2) Update with Operator as FlowFile.  I think
>>>>>>>>>> supporting an update using operators that's set within the NiFi 
>>>>>>>>>> Processor
>>>>>>>>>> Properties, vs in the incoming FlowFile could make this processor a 
>>>>>>>>>> lot
>>>>>>>>>> more flexible.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Ryan
>>>>>>>>>>
>>>>>>>>>> On Wed, Jun 27, 2018 at 4:26 PM Matt Burgess <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> If "customId" is a flow file attribute (and the property supports
>>>>>>>>>>> expression language), then you just have your braces and $
>>>>>>>>>>> swapped,
>>>>>>>>>>> try ${customId} instead of {$customId}
>>>>>>>>>>> On Wed, Jun 27, 2018 at 4:15 PM Mike Thomsen <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>> >
>>>>>>>>>>> > > can you clarify if you mean the NiFi Processor Property
>>>>>>>>>>> "Update Query", or the FlowFile require proper json?
>>>>>>>>>>> >
>>>>>>>>>>> > Both.
>>>>>>>>>>> >
>>>>>>>>>>> > > I'm getting an error:  MongoDB due to redstartDocument can
>>>>>>>>>>> only be called when CurrentBSONType is DOCUMENT, not when 
>>>>>>>>>>> CurrentBSONType
>>>>>>>>>>> is Array.
>>>>>>>>>>> >
>>>>>>>>>>> > PutMongo does not support arrays.
>>>>>>>>>>> >
>>>>>>>>>>> > > I'm trying to do the latter, "specify a document that
>>>>>>>>>>> contains update operators"... On the mongo command line, the update 
>>>>>>>>>>> would
>>>>>>>>>>> be:
>>>>>>>>>>> > > db.collection.update({"customId":{$customId},{$set:
>>>>>>>>>>> {"status":"Stage_2"}});
>>>>>>>>>>> >
>>>>>>>>>>> > I don' t know if that's a typo, but it should be
>>>>>>>>>>> {"customId":{$customId}} followed by {$set: {"status":"Stage_2"}}. 
>>>>>>>>>>> Your
>>>>>>>>>>> version was one big document. What we would expect is a query like {
>>>>>>>>>>> "customId": "XYZ"}. As mentioned, $customId is not a valid JSON 
>>>>>>>>>>> value.
>>>>>>>>>>> >
>>>>>>>>>>> > Let me know if that helps.
>>>>>>>>>>> >
>>>>>>>>>>> > Mike
>>>>>>>>>>> >
>>>>>>>>>>> > On Wed, Jun 27, 2018 at 3:15 PM Ryan Hendrickson <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>> >>
>>>>>>>>>>> >> Hi Mike,
>>>>>>>>>>> >>    Just curious - any other suggestions?
>>>>>>>>>>> >>
>>>>>>>>>>> >> Thanks,
>>>>>>>>>>> >> Ryan
>>>>>>>>>>> >>
>>>>>>>>>>> >> On Thu, Jun 21, 2018 at 5:23 PM Ryan Hendrickson <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> Thanks for the suggestions, can you clarify if you mean the
>>>>>>>>>>> NiFi Processor Property "Update Query", or the FlowFile require 
>>>>>>>>>>> proper
>>>>>>>>>>> json?  I'm not sure how to get proper json with the $set in there.
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> I made the following modifications based it:
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> NiFi Processors Properties:
>>>>>>>>>>> >>>    Update Query: [{"customId":{$customId}},{"$set":
>>>>>>>>>>> {"status":"Stage_2"}}]
>>>>>>>>>>> >>>    Update Mode: With operators enabled  --- Confirmed that
>>>>>>>>>>> I've been using this.
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> FlowFile Contents: [{"customId":{$customId}},{"$set":
>>>>>>>>>>> {"status":"Stage_2"}}]
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> I'm getting an error:  MongoDB due to redstartDocument can
>>>>>>>>>>> only be called when CurrentBSONType is DOCUMENT, not when 
>>>>>>>>>>> CurrentBSONType
>>>>>>>>>>> is Array.
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> The NiFi Docs for Put Mongo say [1]:
>>>>>>>>>>> >>> Update Query: Specify a full MongoDB query to be used for
>>>>>>>>>>> the lookup query to do an update/upsert.  Supports Expression 
>>>>>>>>>>> Language: true
>>>>>>>>>>> >>> Update Mode: Choose an update mode. You can either supply a
>>>>>>>>>>> JSON document to use as a direct replacement or specify a document 
>>>>>>>>>>> that
>>>>>>>>>>> contains update operators like $set and $unset.
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> I'm trying to do the latter, "specify a document that
>>>>>>>>>>> contains update operators"... On the mongo command line, the update 
>>>>>>>>>>> would
>>>>>>>>>>> be:
>>>>>>>>>>> >>>   db.collection.update({"customId":{$customId},{$set:
>>>>>>>>>>> {"status":"Stage_2"}});
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> In the NiFi flow, all I have is the customId, and I want to
>>>>>>>>>>> set a status in the database when I receive it, but the database 
>>>>>>>>>>> has a
>>>>>>>>>>> larger set of doc keys/values.  I know I could do GetMongo -> 
>>>>>>>>>>> JoltTransform
>>>>>>>>>>> for status -> PutMongo, but it seems silly to use 3 processors when 
>>>>>>>>>>> this
>>>>>>>>>>> PutMongo looks like it can do it...
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> Thanks,
>>>>>>>>>>> >>> Ryan
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> [1]
>>>>>>>>>>> https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-mongodb-nar/1.6.0/org.apache.nifi.processors.mongodb.PutMongo/index.html
>>>>>>>>>>> >>>
>>>>>>>>>>> >>>
>>>>>>>>>>> >>>
>>>>>>>>>>> >>> On Thu, Jun 21, 2018 at 4:57 PM Mike Thomsen <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>> >>>>
>>>>>>>>>>> >>>> Two things:
>>>>>>>>>>> >>>>
>>>>>>>>>>> >>>> 1. You need to use valid JSON. Your query is not a valid
>>>>>>>>>>> JSON example because some of the values are not quoted.
>>>>>>>>>>> >>>> 2. You need to make sure the update option is set to use
>>>>>>>>>>> operators, not use document.
>>>>>>>>>>> >>>>
>>>>>>>>>>> >>>> Let us know if that helps.
>>>>>>>>>>> >>>>
>>>>>>>>>>> >>>> Mike
>>>>>>>>>>> >>>>
>>>>>>>>>>> >>>> On Thu, Jun 21, 2018 at 3:19 PM Ryan Hendrickson <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> Hi,
>>>>>>>>>>> >>>>>    I can't seem to figure out the right combo of
>>>>>>>>>>> parameters to get a document to update in Mongo using the PutMongo
>>>>>>>>>>> processor and the $set operator.
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> Try 1:
>>>>>>>>>>> >>>>> The incoming flowfile contains the customId: abc
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> NiFi Processor Properties:
>>>>>>>>>>> >>>>>    Mode: update
>>>>>>>>>>> >>>>>    Upsert: false
>>>>>>>>>>> >>>>>    Update Query Key: No value set
>>>>>>>>>>> >>>>>    Update Query: {"customId":{$customId}},{$set:
>>>>>>>>>>> {"status":"Stage_2"}}
>>>>>>>>>>> >>>>>    Update Mode: With operators enabled
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> This consistently fails, the abbreviated log output:
>>>>>>>>>>> >>>>> PutMongo Failed to insert into MongoDB due to
>>>>>>>>>>> com.mongodb.util.JSONParseException:
>>>>>>>>>>> >>>>> abc
>>>>>>>>>>> >>>>> ...
>>>>>>>>>>> >>>>> at com.mongodb.util.JSONParser.parse(JSON.java:230)
>>>>>>>>>>> >>>>> ...
>>>>>>>>>>> >>>>> at
>>>>>>>>>>> org.apache.nifi.processors.mongodb.PutMongo.onTrigger(PutMongo.java:201)
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>>
>>>>>>>>>>> https://github.com/apache/nifi/blob/rel/nifi-1.6.0/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java#L201
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> It looks like it's trying to parse the incoming flowfile
>>>>>>>>>>> as a JSON document with the above parameters set.
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> Try 2:
>>>>>>>>>>> >>>>> With that in mind, I changed my input flowfile to be a
>>>>>>>>>>> json object, but I don't think it should need to be, because I'm 
>>>>>>>>>>> using the
>>>>>>>>>>> Update Query with Operators.
>>>>>>>>>>> >>>>> New incoming flow file: {"customId":"abc"}
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> This allows it to get line 225, before it fails with:
>>>>>>>>>>> >>>>> PutMongo Failed to insert into MongoDB due to
>>>>>>>>>>> java.lang.IllegalArgumentException: Invalid BSON field name 
>>>>>>>>>>> customId:
>>>>>>>>>>> >>>>> at
>>>>>>>>>>> org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:494)
>>>>>>>>>>> >>>>> at
>>>>>>>>>>> org.apache.nifi.processors.mongodb.PutMongo.onTrigger(PutMongo:225)
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>>
>>>>>>>>>>> https://github.com/apache/nifi/blob/rel/nifi-1.6.0/nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-processors/src/main/java/org/apache/nifi/processors/mongodb/PutMongo.java#L225
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> Line 225: //collection.updateOne(query, update, new
>>>>>>>>>>> UpdateOptions().upsert(upsert));
>>>>>>>>>>> >>>>>    query = {"customId":{$customId}},{$set:
>>>>>>>>>>> {"status":"Stage_2"}}
>>>>>>>>>>> >>>>>    update = {"customId":"abc"}
>>>>>>>>>>> >>>>> It looks like the 'update' variable, is my incoming
>>>>>>>>>>> flowfile.  I'm not sure why it would be, based on my understanding 
>>>>>>>>>>> of the
>>>>>>>>>>> processor properties works.
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> If anyone has any insight on how to set this up for using
>>>>>>>>>>> the operators to update a document, I'd really appreciate the 
>>>>>>>>>>> insight.  I'm
>>>>>>>>>>> lost in debugging.
>>>>>>>>>>> >>>>>
>>>>>>>>>>> >>>>> Thanks,
>>>>>>>>>>> >>>>> Best,
>>>>>>>>>>> >>>>> Ryan
>>>>>>>>>>> >>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>

Reply via email to