Ryan, The syntax that the mongo shell supports is not applicable to most Mongo client libraries, including the Java one. So be very careful with that. That is a JavaScript REPL, so it accepts a lot of things that standard JSON parsers will reject.
On Wed, Jun 27, 2018 at 4:14 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 >>>>> >>>>>
