java - 如何通过Java驱动在MongoDB中创建复合索引?

标签 java mongodb indexing mongodb-java

我想通过 Java 驱动程序在 MongoDB 中的 AgeName 上创建复合索引,这是我的语法:

coll.ensureIndex(new BasicDBObject("Age", 1),new BasicDBObject("Name", -1));
List <DBObject> list = coll.getIndexInfo();

  for (DBObject o : list) {
       System.out.println(o);
    }

但它只创建 1 个索引而不是复合索引并给我结果:

{ "v" : 1 , "key" : { "_id" : 1} ,"ns" :"EmployeeData.EmpPersonalData", "name":"_id_"}
{ "v" : 1 , "key" : { "Age" : 1} , "ns" : "EmployeeData.EmpPersonalData" , "name" : "Age_1" , "Name" : -1}

那么如何通过java驱动创建集合的复合索引呢?

最佳答案

如果您查看您的代码,您实际上已经使用两个参数调用了 ensureIndex。你的第一个参数是键,你的第二个参数变成了一些额外的字段:Name: -1

您希望在第一个参数中传递的是这个对象 {"Age":1, "Name":-1}。你实际传递的是 {"Age":1}, {"Name":-1}

所以你想做这样的事情:

BasicDBObject obj = new BasicDBObject();
obj.put("Age", 1);
obj.put("Name", -1);
coll.ensureIndex(obj);

请注意,索引将使用默认名称创建。要提供特定名称,请执行以下操作:

coll.ensureIndex(obj, "MyName");

关于java - 如何通过Java驱动在MongoDB中创建复合索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488669/

相关文章:

java - Android 颜色通知图标

c# - MongoDB SetDefaultValue 不起作用 - 为什么?

MySQL 如果我改变它所在的列,索引会发生什么?

python - 索引越界 (Python)

php - 如何在 CentOS 5.3 上安装 php-mongodb?

solr - 如何将 solr 字符串字段截断为 10 个字符?

java - 复合 Material 的关键听众?

java - 在java中实现不透明句柄

java - Android:放置多个 fragment 共享的功能的位置

php - 如何通过搜索内部数组来检查记录是否存在