2012-07-15 92 views
8

我想在Age和MongoDB中Name通过Java驱动程序,并在这里建立复合索引是我的语法:如何通过Java驱动程序在MongoDB中创建复合索引?

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驱动程序创建集合上的compund索引?

回答

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); 

注意的是,指数将使用默认名称创建。要提供具体名称,请执行以下操作:

coll.ensureIndex(obj, "MyName"); 
+0

非常感谢盖茨,它的工作:) – jad001 2012-07-15 05:36:01

+6

在#1,我拿点,如果你标记的答案正确和/或投上一票。它还告诉其他人这是正确的答案。你能做到吗? – 2012-07-16 17:45:05

+0

为什么不能@盖茨!对不起,我一定已经做过,但我是新的这个网站:) – jad001 2012-07-16 20:58:12

3

您可以根据官方文档进行尝试。

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

Official Mongo DB Driver Java documentation

相关问题