2012-07-15 100 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

相關問題