MongoDB:Java出现“未知的顶级运算符'nameOnly'”错误,但Mongo Shell一切正常

时间:2019-11-27 14:53:59

标签: java mongodb spring-boot

我们有一个有趣的问题。

我们有一个带有简单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替换了一些私人数据,希望一切都清楚。

0 个答案:

没有答案