所以我使用的是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"}
发生了什么事?
答案 0 :(得分:0)
发现了这个问题。所以事实证明,如果mongo shell和正在运行的mongo实例有两个不同的版本,那么db.getCollectionNames()
和db.collection.getIndexes()
将不会返回任何输出。
如果您连接到远程mongo实例并且通过您正在连接的实例正在运行说2.x shell版本(您可以在启动shell时看到这一点)并且运行的mongo是3.x版本
对于使用WiredTiger存储引擎的MongoDB 3.0部署,如果您在3.0之前从
db.getCollectionNames()
shell的版本运行db.collection.getIndexes()
和mongo
,或者在兼容3.0之前的驱动程序版本即使存在集合和索引,版本db.getCollectionNames()
和db.collection.getIndexes()
也不会返回任何数据。有关更多信息,请参阅WiredTiger和驱动程序版本兼容性。
花了将近一个小时试图解决这个问题,认为这可能对其他人有所帮助。