Thanks Thad. I created this JIRA: https://issues.apache.org/jira/browse/NIFI-2135
If I said anything wrong there please let me know, or add to the JIRA. On Tue, Jun 28, 2016 at 8:59 AM, Thad Guidry <[email protected]> wrote: > Yes, you want updateOne() > https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/ > Not replaceOne() > https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/ > > However, also look at the upsert option itself as well which does a > replace if NO MATCH > https://api.mongodb.com/java/3.2/com/mongodb/client/model/UpdateOptions.html > which basically prescribes to this kind of handling > https://docs.mongodb.com/manual/reference/method/db.collection.update/ > > > Thad > +ThadGuidry <https://www.google.com/+ThadGuidry> > > On Tue, Jun 28, 2016 at 7:26 AM, Bryan Bende <[email protected]> wrote: > >> I'm not very familiar with MongoDB, but I can see that when using >> "update" mode PutMongo does this: >> >> else { >> // update >> final boolean upsert = context.getProperty(UPSERT).asBoolean(); >> final String updateKey = >> context.getProperty(UPDATE_QUERY_KEY).getValue(); >> final Document query = new Document(updateKey, doc.get(updateKey)); >> >> collection.replaceOne(query, doc, new UpdateOptions().upsert(upsert)); >> logger.info("updated {} into MongoDB", new Object[] { flowFile }); >> } >> >> I'm wondering if that collection.replaceOne() is the problem, I see there >> is collection.updateOne() which sounds more correct here. >> >> If someone with more MongoDB experience could verify this I would be >> happy to open a JIRA and get this changed. >> >> -Bryan >> >> On Tue, Jun 28, 2016 at 5:32 AM, Asanka Sanjaya Herath < >> [email protected]> wrote: >> >>> Hi Bryan, >>> >>> Your suggestion was worked fine. I have another question. This is not >>> related to the subject, but it is related to PutMongo processor. How can I >>> use put mongo processor to add a new key value pair to an existing >>> document? The flow file contains the document object Id. I have set 'mode' >>> property to 'update' and 'upsert' property to false and 'update query key' >>> property to '_id'. Flow file content is something like this. >>> >>> { >>> _id:ObjectId(577216f0154b943fe8068079) >>> expired:true >>> } >>> >>> Without inserting the 'expired:true', it replaces the whole document >>> with the given one. So is there a way to insert the new key value pair to >>> collection without replacing the whole collection in MongoDB using putmongo >>> processor? Your concern regarding this is highly appreciated. >>> >>> >>> >>> On Mon, Jun 27, 2016 at 6:43 PM, Asanka Sanjaya Herath < >>> [email protected]> wrote: >>> >>>> Hi Bryan, >>>> Thank you for the input. That really helps. I'll try that. >>>> >>>> On Mon, Jun 27, 2016 at 6:31 PM, Bryan Bende <[email protected]> wrote: >>>> >>>>> Hello, >>>>> >>>>> Right now AttributesToJson does treat everything as strings. I >>>>> remember a previous discussion about adding support for different types, >>>>> but I can't find a JIRA that references this. >>>>> >>>>> One option to work around this could be to use ReplaceText to >>>>> construct the JSON, instead of AttributesToJson. You could set the >>>>> Replacement Value property to something like: >>>>> >>>>> { >>>>> "dataSourceId" : "${datasource}", >>>>> "filename" : "${filename}", >>>>> "sent_date" : ${sent_date}, >>>>> "uuid" : "${uuid}", >>>>> "originalSource" : "${originalsource}" >>>>> } >>>>> >>>>> Of course using the appropriate attribute names. >>>>> >>>>> Another option is that in the upcoming 0.7.0 release, there is a new >>>>> processor to transform JSON using JOLT. With that processor you may be >>>>> able >>>>> to take the output of AttributesToJson and apply a transform that converts >>>>> the date field to remove the quotes. >>>>> >>>>> Hope that helps. >>>>> >>>>> -Bryan >>>>> >>>>> On Mon, Jun 27, 2016 at 8:16 AM, Asanka Sanjaya Herath < >>>>> [email protected]> wrote: >>>>> >>>>>> I'm trying to insert a flow file to MongoDb which has a date record >>>>>> as an attribute. First I sent that flow file through an attribute to JSON >>>>>> processor, so that all attributes are now converted to a Json document in >>>>>> flow file body. When I insert that flow file to Mongodb using PutMongo >>>>>> processor, it saves the "sent_date" attribute as a String. I want this to >>>>>> be saved as an ISO date object. >>>>>> >>>>>> My flow file looked like this. >>>>>> >>>>>> { >>>>>> "dataSourceId" : "xxxx", >>>>>> "filename" : "979f7bc5-a395-4396-9625-69fdb2c806c6", >>>>>> "sent_date" : "Mon Jan 18 04:50:50 IST 2016", >>>>>> "uuid" : "77a5ef56-8b23-40ee-93b5-78c6323e0e1c", >>>>>> "originalSource" : "ImportedZip" >>>>>> } >>>>>> >>>>>> Then I prepend "ISODate" to "sent_date" attribute using another >>>>>> processor. So now my flow file content looks like this. >>>>>> { >>>>>> "dataSourceId" : "xxxx", >>>>>> "filename" : "979f7bc5-a395-4396-9625-69fdb2c806c6", >>>>>> "sent_date" : "ISODate('Mon Jan 18 04:50:50 IST 2016')", >>>>>> "uuid" : "77a5ef56-8b23-40ee-93b5-78c6323e0e1c", >>>>>> "originalSource" : "ImportedZip" >>>>>> } >>>>>> >>>>>> But still It is saved as a string in MongoDB, because of the double >>>>>> quotation marks. Is there a way to remove those double quotation marks >>>>>> when >>>>>> convert using AttributeToJson processor? >>>>>> >>>>>> Any help is appreciated. >>>>>> >>>>>> -- >>>>>> Thanks, >>>>>> Regards, >>>>>> ASH >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Thanks, >>>> Regards, >>>> ASH >>>> >>> >>> >>> >>> -- >>> Thanks, >>> Regards, >>> ASH >>> >> >> >
