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