我们有一个有趣的问题。
我们有一个带有简单MongoDB GUI工具的Java应用程序(Java 8,Spring Boot,MongoDB驱动程序3.8.2)。
案例1。我的开发人员本地计算机。 MongoDB 3.6.0版。非管理员用户。
部分Java代码:
mongoClient.listDatabaseNames()
返回可用数据库名称的列表。
一切都很好。
情况2。远程服务器。 MongoDB 3.6.0版。非管理员用户。
同一应用程序,同一行:
mongoClient.listDatabaseNames()
引发错误:
"Command failed with error 2: 'unknown top level operator 'nameOnly' on server ... ' "
我们尝试使用mongo shell运行同一命令(以检查“ nameOnly”运算符):
use admin
db.adminCommand( { listDatabases: 1, nameOnly: true } )
输出:
{
"databases" : [
{
"name" : "db1"
},
---other databases---
],
"ok" : 1
}
Mongo Java驱动程序日志(来自ServerMonitor.java):
Localhost(来自案例1):
Monitor thread successfully connected to server with description
ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=203835}
远程(来自案例2):
Monitor thread successfully connected to server with description
ServerDescription{address=host:ip, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 6, 0]}, minWireVersion=0, maxWireVersion=6, maxDocumentSize=16777208, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=5633088, setName='rs0', canonicalAddress=host:ip, hosts=[host:ip,host:ip], passives=[], arbiters=[host:ip], primary='host:ip', tagSet=TagSet{[]}, electionId=somedata, setVersion=1, lastWriteDate=null, lastUpdateTimeNanos=8767847038926801}
有什么想法吗?它与“ REPLICA_SET_PRIMARY”类型有关吗?谢谢。
P.S。我用host:ip替换了一些私人数据,希望一切都清楚。