我尝试从MongoDB读取数据。我有一个问题:
Exception in thread "main" com.mongodb.MongoException: db already exists with different case other
这个例子从这里抛出:
DBCursor cur[] = new DBCursor[cursorSize];
...
cur[i].hasNext() // Exeption
问题是什么?
Mongo的版本是2.10.1
答案 0 :(得分:15)
此错误表示您尝试创建的数据库仅根据已存在的数据库名称而不同。例如,如果您已经有一个名为“test”的数据库,则在尝试为现有名称创建“Test”,“TEST”或其他大小写变体时会出现此错误。
数据库名称用于命名数据范围文件,因此名称中的冲突可能会导致在不区分大小写的文件系统上发生错误事件。
MongoDB手册详细介绍了Naming Restrictions,包括区分大小写和针对不同操作系统的限制。
问题描述中似乎省略了useful part of the error message,但您应该在此消息中看到的是现有数据库的名称以及被拒绝的新名称。
相应的MongoDB 2.4服务器code snippet是:
ss << "db already exists with different case other: [" << duplicate << "] me [" << _name << "]";
答案 1 :(得分:0)
我认为Stennie有很好的定义,并解释了为什么你可能会收到这个错误。但是,在我的情况下,我遇到了一个你或其他人也可能遇到的有趣案例。我有一个名为&#34; HDB&#34;但当我将我的用户添加到system.users集合时,使用&#34; db&#34;:&#34; hdb&#34; (小写)。所以,我花了一个小时左右的时间试图查看在我登录时可能出现的问题。因此,如果您收到此错误,请确保您不会意外地为您的用户添加较低/不同的数据库名称。为了证实这一点。 1.以管理员/默认帐户运行
登录db.system.users.find().pretty();
然后查找获得此错误的用户名以及&#34; db&#34;在该json对象中,并将其与您拥有的实际数据库进行比较。
show dbs;
将您在第一步中看到的数据库与您在此步骤中看到的数据库名称进行比较。 (该命令将显示您拥有的所有数据库,但显然您应该只关注您在第一步中使用/看到的那些数据集。)