在以下程序中getDatabaseNames()
返回值列表,getCollectionNames()
返回一组值。为什么两者都不返回Set
?
这是否意味着我们可以创建具有相同名称的数据库?
package demo;
import java.util.List;
import java.util.Set;
import com.mongodb.DB;
import com.mongodb.MongoClient;
public class Collections2 {
public static void main(String[] args) {
MongoClient client=null;
try {
client=new MongoClient();
//Lists all the database names
System.out.println("List of databases ");
List<String> DBset=client.getDatabaseNames();
for(String string:DBset){
System.out.println(string);
}
//list all the collection names in school DB
DB db=client.getDB("school");
System.out.println("List of collections in school DB");
Set<String> set=db.getCollectionNames();
for (String string:set) {
System.out.println(string);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
但听起来很奇怪,但是是的!
这不是Java特有的。正如this related question所述,您也可以使用命令行工具mongo
复制此行为。
引用问题:
以下是它的发生方式:
- 我已经有了一个名为“test1”的数据库,它只存储带有文档的集合。
- 然后,我使用它来存储使用GridFS的文件,因此它包含二进制文件。(实际上,我认为这可能是原因,但我不知道为什么)
- 现在问题发生了。当我尝试使用像test1这样的命令访问“test1”时。将创建一个名为“test1”的空数据库。
醇>就像dbs演示的那样:
test1 empty test1 0.0625GB
至于如何处理这个问题,我不确定,因为Java驱动程序只有这种获取DB的方法(截至当前的稳定版,2.10.1):
返回数据库实例的另一个函数getUsedDatabases()仅返回此运行中此MongoDB驱动程序实例使用的数据库对象。
这意味着,在同一个运行时,你可以使用这个“功能”(?),并处理两个同名的DB,但这会让人觉得难看如果出现问题就要清理干净的情况,并且在清理混乱之前关闭JVM ...(理论上,我现在无法确认这一点......当我靠近我时,我会报告我的发现开发Mongo实例。)