MongoDB没有显示集合信息,即使我确定它在那里

时间:2016-05-25 19:22:11

标签: mongodb clojure

所以我使用的是MongoDB 3.2版本。 我通过名为monger的Clojure包装器创建了一个db及其集合 但是当我连接到mongo shell时,检查是否创建了集合,我看不到它。

以下是代码:

Primary> use db_name

PRIMARY> db.version()
3.2.3

PRIMARY> db.stats()
{
        "db" : "db_name",
        "collections" : 4,
        "objects" : 0,
        "avgObjSize" : 0,
        "dataSize" : 0,
        "storageSize" : 16384,
        "numExtents" : 0,
        "indexes" : 9,
        "indexSize" : 36864,
        "ok" : 1
}

PRIMARY> show collections

PRIMARY> db.coll1.getIndexes()
[ ]

PRIMARY> db.getCollectionInfos()
Tue May 24 16:29:44 TypeError: db.getCollectionInfos is not a function (shell):1

PRIMARY>

但是当我检查是否通过clojure创建了集合时,我可以看到这些信息。

user=> (monger.db/get-collection-names mongo-db*)
#{"coll1" "coll2" "coll3" "coll4"}

发生了什么事?

1 个答案:

答案 0 :(得分:0)

发现了这个问题。所以事实证明,如果mongo shell和正在运行的mongo实例有两个不同的版本,那么db.getCollectionNames()db.collection.getIndexes()将不会返回任何输出。

如果您连接到远程mongo实例并且通过您正在连接的实例正在运行说2.x shell版本(您可以在启动shell时看到这一点)并且运行的mongo是3.x版本

根据the documentation

  

对于使用WiredTiger存储引擎的MongoDB 3.0部署,如果您在3.0之前从db.getCollectionNames() shell的版本运行db.collection.getIndexes()mongo,或者在兼容3.0之前的驱动程序版本即使存在集合和索引,版本db.getCollectionNames()db.collection.getIndexes()也不会返回任何数据。有关更多信息,请参阅WiredTiger和驱动程序版本兼容性。

花了将近一个小时试图解决这个问题,认为这可能对其他人有所帮助。