Details
Description
The mongodb:// URI-style connection string format permits the database name to be absent. However, the shell complains if this dbname (or the preceding backslash) isn't specified:
$ /m/3.2.1/bin/mongo mongodb://genique:11111
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111
|
2016-01-30T22:24:17.085+1100 E QUERY [thread1] Error: Missing database name in connection string "mongodb://genique:11111" :
|
connect@src/mongo/shell/mongo.js:220:1
|
@(connect):1:6
|
|
exception: connect failed
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111/
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111/
|
2016-01-30T22:24:18.815+1100 E QUERY [thread1] Error: Missing database name in connection string "mongodb://genique:11111/" :
|
connect@src/mongo/shell/mongo.js:220:1
|
@(connect):1:6
|
|
exception: connect failed
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111/db
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111/db
|
>
|
bye
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111?replicaSet=replset
|
FailedToParse std::exception
|
try '/m/3.2.1/bin/mongo --help' for more information
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111/?replicaSet=replset
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111/?replicaSet=replset
|
2016-01-30T22:26:02.226+1100 I NETWORK [thread1] Starting new replica set monitor for replset/genique:11111
|
2016-01-30T22:26:02.226+1100 I NETWORK [ReplicaSetMonitorWatcher] starting
|
2016-01-30T22:26:02.227+1100 I NETWORK [thread1] changing hosts to replset/genique:11111,genique:11112 from replset/genique:11111
|
2016-01-30T22:26:02.230+1100 E QUERY [thread1] Error: Missing database name in connection string "mongodb://genique:11111/?replicaSet=replset" :
|
connect@src/mongo/shell/mongo.js:220:1
|
@(connect):1:6
|
|
exception: connect failed
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111/db?replicaSet=replset
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111/db?replicaSet=replset
|
2016-01-30T22:26:12.385+1100 I NETWORK [thread1] Starting new replica set monitor for replset/genique:11111
|
2016-01-30T22:26:12.385+1100 I NETWORK [ReplicaSetMonitorWatcher] starting
|
2016-01-30T22:26:12.386+1100 I NETWORK [thread1] changing hosts to replset/genique:11111,genique:11112 from replset/genique:11111
|
>
|
bye
|
Note that the URI spec specifies that if the database name is absent and authentication credentials are also specified, then the default db is admin (unless the authSource option (or, for the shell, --authenticationDatabase) is also specified). Care will need to be taken to override the shell's default database of test in this case. The spec doesn't specify a default database otherwise; presumably the shell's normal behaviour of defaulting to the test database is the most appropriate behaviour.
It is interesting how late the missing database name is found, it is well after parsing has finished, and after at least 1 initial connection.
This means that if an expected connection can't be created, the missing dbname is not noticed:
$ /m/3.2.1/bin/mongo mongodb://genique:33333
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:33333
|
2016-01-30T22:42:59.384+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:42:59.384+1100 E QUERY [thread1] Error: couldn't connect to server genique:33333, connection attempt failed :
|
connect@src/mongo/shell/mongo.js:218:14
|
@(connect):1:6
|
|
exception: connect failed
|
$ /m/3.2.1/bin/mongo mongodb://genique:33333/db?replicaSet=replset
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:33333/db?replicaSet=replset
|
2016-01-30T22:43:44.723+1100 I NETWORK [thread1] Starting new replica set monitor for replset/genique:33333
|
2016-01-30T22:43:44.723+1100 I NETWORK [ReplicaSetMonitorWatcher] starting
|
2016-01-30T22:43:44.723+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:44.723+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:44.723+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 1 checks in a row. Polling will stop after 29 more failed checks
|
2016-01-30T22:43:45.224+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:45.224+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:45.224+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 2 checks in a row. Polling will stop after 28 more failed checks
|
2016-01-30T22:43:45.725+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:45.725+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:45.725+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 3 checks in a row. Polling will stop after 27 more failed checks
|
2016-01-30T22:43:46.225+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:46.225+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:46.225+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 4 checks in a row. Polling will stop after 26 more failed checks
|
^C
|
$ /m/3.2.1/bin/mongo mongodb://genique:33333/?replicaSet=replset
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:33333/?replicaSet=replset
|
2016-01-30T22:43:56.926+1100 I NETWORK [thread1] Starting new replica set monitor for replset/genique:33333
|
2016-01-30T22:43:56.927+1100 I NETWORK [ReplicaSetMonitorWatcher] starting
|
2016-01-30T22:43:56.927+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:56.927+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:56.927+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 1 checks in a row. Polling will stop after 29 more failed checks
|
2016-01-30T22:43:57.428+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:57.428+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:57.428+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 2 checks in a row. Polling will stop after 28 more failed checks
|
2016-01-30T22:43:57.929+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:57.929+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:57.929+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 3 checks in a row. Polling will stop after 27 more failed checks
|
2016-01-30T22:43:58.430+1100 W NETWORK [thread1] Failed to connect to 127.0.1.1:33333, reason: errno:111 Connection refused
|
2016-01-30T22:43:58.430+1100 W NETWORK [thread1] No primary detected for set replset
|
2016-01-30T22:43:58.430+1100 I NETWORK [thread1] All nodes for set replset are down. This has happened for 4 checks in a row. Polling will stop after 26 more failed checks
|
^C
|
By contrast, a missing trailing slash when options are used (which is still a valid URI) is noticed early at parse time:
$ /m/3.2.1/bin/mongo mongodb://genique:11111
|
MongoDB shell version: 3.2.1
|
connecting to: mongodb://genique:11111
|
2016-01-30T22:24:17.085+1100 E QUERY [thread1] Error: Missing database name in connection string "mongodb://genique:11111" :
|
connect@src/mongo/shell/mongo.js:220:1
|
@(connect):1:6
|
|
exception: connect failed
|
$ /m/3.2.1/bin/mongo mongodb://genique:11111?replicaSet=replset
|
FailedToParse std::exception
|
try '/m/3.2.1/bin/mongo --help' for more information
|
$ /m/3.2.1/bin/mongo mongodb://genique:33333?replicaSet=replset
|
FailedToParse std::exception
|
try '/m/3.2.1/bin/mongo --help' for more information
|
Attachments
Issue Links
- is depended on by
-
CXX-846 Connection string URI parsing is no correct
-
- Closed
-
- is related to
-
SERVER-22707 MongoDB shell's parsing of connection string uses incorrect regular expression
-
- Closed
-
- related to
-
SERVER-6233 Support MongoDB URIs as mongo shell argument
-
- Closed
-