I've added my additional comments.

Looks good enough now.


Thad
+ThadGuidry <https://www.google.com/+ThadGuidry>

On Tue, Jun 28, 2016 at 8:20 AM, Bryan Bende <[email protected]> wrote:

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

Reply via email to