Does your cluster have different users per database? Or to put it a different way, is the user that you are authenticating as have at least read/write privileges on every database?
The connection is created when the processor is scheduled so if you are authenticating against a specific database, then the DB needs to be in the connection string. If your authenticating as a user that can authenticate against the admin DB, then you don't need to know the DB a priori. That's my (probably over-simplistic) understanding anyways. -Jason On Tue, Aug 1, 2017 at 8:38 AM, James McMahon <jsmcmah...@gmail.com> wrote: > Follow up: > 1- changing the query to be simple json without any db.find etc resolved > that issue re: the invalid query. Thanks again to Pierre V. for pointing > this out. > > 2- To eliminate the authentication problem I had to include the database > name in the URI. So this > Mongo URI mongodb://nifi:[my pwd]@34.227.51.144 > had to be this > Mongo URI mongodb://nifi:[my pwd]@34.227.51.144/ > DataServiceAudit > I made the assumption that because NiFi specifically calls for Mongo > Database Name in the second parameter of GetMongo, it means that the > database name must be left off the Mongo URI. To me if you want it in the > URI, then why have it at all as a separate parameter? But clearly that is > not the case. > > It worked with these changes. > > On Sun, Jul 30, 2017 at 12:31 PM, James McMahon <jsmcmah...@gmail.com> > wrote: > >> Hello. I cannot get a simple test query to work against MongoDB from >> GetMongo. Here is what I attempt to do: >> >> Mongo URI mongodb://nifi:[my pwd]@34.227.51.144 >> Mongo Database Name DataServiceAudit >> Mongo Collection Name Audit >> SSL Context Service No value set >> Client Auth NONE >> Query db.find({'Call':'Marko'}) >> >> I leave the collection out (ie, db.Audit.find...) because I have >> expressly stated the collection name in the processor. >> I am trying to get this working in its simplest form before I tackle >> themore complex, and so am not using SSL at this time. >> >> I am using NiFi 1.3.0 in this case. >> >> In the UI the processor indicates this problem: >> 'Query' validated against 'db.find({'Call':'Marko'})' is invalid because >> org.bson.json.JSONParseException >> >> Why does it throw that error? >> >> If I remove the Query entirely, I can get the processor to enter a run >> state. However then in the nifi-app.log it says there is an authentication >> issue: >> >> 2017-07-30 16:27:27,606 INFO [pool-10-thread-1] >> o.a.n.c.r.WriteAheadFlowFileRepository Successfully checkpointed >> FlowFile Repository with 2313 records in 122 milliseconds >> 2017-07-30 16:27:41,147 ERROR [Timer-Driven Process Thread-7] >> o.a.nifi.processors.mongodb.GetMongo >> GetMongo[id=100c11db-1fb9-1138-1050-0f63cda85d11] >> Failed to execute query null due to com.mongodb.MongoTimeoutException: >> Timed out after 30000 ms while waiting for a server that matches >> ReadPreferenceServerSelector{readPreference=primary}. Client view of >> cluster state is {type=UNKNOWN, servers=[{address=34.227.51.144:27017, >> type=UNKNOWN, state=CONNECTING, >> exception={com.mongodb.MongoSecurityException: >> Exception authenticating MongoCredential{mechanism=null, >> userName='nifi', source='admin', password=<hidden>, >> mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: >> Command failed with error 18: 'Authentication failed.' on server >> 34.227.51.144:27017. The full response is { "ok" : 0.0, "errmsg" : >> "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" >> }}}]: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while >> waiting for a server that matches >> ReadPreferenceServerSelector{readPreference=primary}. >> Client view of cluster state is {type=UNKNOWN, servers=[{address= >> 34.227.51.144:27017, type=UNKNOWN, state=CONNECTING, >> exception={com.mongodb.MongoSecurityException: Exception authenticating >> MongoCredential{mechanism=null, userName='nifi', source='admin', >> password=<hidden>, mechanismProperties={}}}, caused by >> {com.mongodb.MongoCommandException: Command failed with error 18: >> 'Authentication failed.' on server 34.227.51.144:27017. The full >> response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, >> "codeName" : "AuthenticationFailed" }}}] >> com.mongodb.MongoTimeoutException: Timed out after 30000 ms while >> waiting for a server that matches >> ReadPreferenceServerSelector{readPreference=primary}. >> Client view of cluster state is {type=UNKNOWN, servers=[{address= >> 34.227.51.144:27017, type=UNKNOWN, state=CONNECTING, >> exception={com.mongodb.MongoSecurityException: Exception authenticating >> MongoCredential{mechanism=null, userName='nifi', source='admin', >> password=<hidden>, mechanismProperties={}}}, caused by >> {com.mongodb.MongoCommandException: Command failed with error 18: >> 'Authentication failed.' on server 34.227.51.144:27017. The full >> response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, >> "codeName" : "AuthenticationFailed" }}}] >> at com.mongodb.connection.BaseCluster.createTimeoutException(Ba >> seCluster.java:369) >> at com.mongodb.connection.BaseCluster.selectServer(BaseCluster. >> java:101) >> at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionS >> ource.<init>(ClusterBinding.java:75) >> at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionS >> ource.<init>(ClusterBinding.java:71) >> at com.mongodb.binding.ClusterBinding.getReadConnectionSource(C >> lusterBinding.java:63) >> at com.mongodb.operation.OperationHelper.withConnection(Operati >> onHelper.java:210) >> at com.mongodb.operation.FindOperation.execute(FindOperation. >> java:482) >> at com.mongodb.operation.FindOperation.execute(FindOperation. >> java:79) >> at com.mongodb.Mongo.execute(Mongo.java:772) >> at com.mongodb.Mongo$2.execute(Mongo.java:759) >> at com.mongodb.OperationIterable.iterator(OperationIterable.jav >> a:47) >> at com.mongodb.FindIterableImpl.iterator(FindIterableImpl.java: >> 143) >> at org.apache.nifi.processors.mongodb.GetMongo.onTrigger(GetMon >> go.java:158) >> at org.apache.nifi.processor.AbstractProcessor.onTrigger(Abstra >> ctProcessor.java:27) >> at org.apache.nifi.controller.StandardProcessorNode.onTrigger(S >> tandardProcessorNode.java:1120) >> at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask >> .call(ContinuallyRunProcessorTask.java:147) >> at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask >> .call(ContinuallyRunProcessorTask.java:47) >> at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingA >> gent$1.run(TimerDrivenSchedulingAgent.java:132) >> at java.util.concurrent.Executors$RunnableAdapter.call( >> Executors.java:511) >> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java: >> 308) >> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu >> tureTask.access$301(ScheduledThreadPoolExecutor.java:180) >> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu >> tureTask.run(ScheduledThreadPoolExecutor.java:294) >> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool >> Executor.java:1142) >> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo >> lExecutor.java:617) >> at java.lang.Thread.run(Thread.java:748) >> >> >> Yet local to that server, I can successfully execute my query as follows: >> > use DataServiceAudit; >> switched to db DataServiceAudit >> > db.auth("nifi","[this1sdrivingmeKr8z33]") >> 1 >> > db.Audit.find({'Call':'Marko'}); >> { "_id" : ObjectId("596fd29910a0e5063d312589"), "Call" : "Marko", >> "Response" : "Polo" } >> > >> >> I seem to have access to MongoDB as user nifi. Do I have an >> authentication issue here, a Query format issue, or both? >> >> What do I need to do to get this to work? >> >> Thank you very much in advance. -Jim >> >> >> >