> 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
>>>>
>>>>