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

jad*_*001 9 java indexing mongodb mongodb-java

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

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

  for (DBObject o : list) {
       System.out.println(o);
    }
Run Code Online (Sandbox Code Playgroud)

但它只创建1个索引而不是compund索引并给出结果:

{ "v" : 1 , "key" : { "_id" : 1} ,"ns" :"EmployeeData.EmpPersonalData", "name":"_id_"}
{ "v" : 1 , "key" : { "Age" : 1} , "ns" : "EmployeeData.EmpPersonalData" , "name" : "Age_1" , "Name" : -1}
Run Code Online (Sandbox Code Playgroud)

那么如何通过java驱动程序创建集合上的compund索引呢?

Gat*_* VP 26

如果查看代码,实际上已经调用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);
Run Code Online (Sandbox Code Playgroud)

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

coll.ensureIndex(obj, "MyName");
Run Code Online (Sandbox Code Playgroud)

  • 在Stackoverflow中,如果您将答案标记为正确和/或将其投票,我会获得积分.它还告诉其他人这是正确的答案.你能做到吗? (6认同)

小智 5

你可以根据官方文档试试这个。

import org.bson.Document;
db.getCollection("restaurants").createIndex(new Document("cuisine", 1).append("address.zipcode", -1));
Run Code Online (Sandbox Code Playgroud)

官方 Mongo DB 驱动程序 Java 文档