You have to let your session know that reading this information from a non-primary server is OK (literally)…
-bash-4.1$ mongo rs1:SECONDARY> show dbs 2018-02-01T10:37:58.457-0500 E QUERY [thread1] Error: listDatabases failed:{ "operationTime" : Timestamp(1517499476, 1), "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435, "codeName" : "NotMasterNoSlaveOk", "$clusterTime" : { "clusterTime" : Timestamp(1517499476, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1 shellHelper.show@src/mongo/shell/utils.js:813:19 shellHelper@src/mongo/shell/utils.js:703:15 @(shellhelp2):1:1 rs1:SECONDARY> rs.slaveOk() rs1:SECONDARY> show dbs admin 0.000GB config 0.000GB local 0.001GB mongoengine_test 0.004GB rs1:SECONDARY>