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
>