2012-07-15 18 views
8

Voglio creare indice composito sulla Age e Name in MongoDB attraverso il driver Java e qui è la mia sintassi:Come creare un indice composto in MongoDB tramite il driver Java?

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

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

ma creano solo 1 indice non Compund indice e mi danno di conseguenza questo:

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

Quindi come è possibile creare l'indice di compund sulla raccolta tramite il driver java?

risposta

26

Se si guarda il codice, si è effettivamente chiamato ensureIndex con due parametri. Il tuo primo parametro era la chiave e il tuo secondo parametro è diventato un campo in più: Name: -1.

Quello che stai cercando di passare nel primo parametro è questo oggetto {"Age":1, "Name":-1}. Quello che hai effettivamente passato è stato {"Age":1}, {"Name":-1}.

Così si vuole fare qualcosa di simile:

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

nota che l'indice verrà creato con un nome predefinito. Per fornire un nome specifico, procedi come segue:

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

Grazie mille Gates, che funziona :) – jad001

+6

In StackOverflow, ottengo punti se si contrassegna la risposta come corretta e/o votare in su. Dice anche agli altri che questa era la risposta corretta. Saresti in grado di farlo? –

+0

perché non @Gates! scusa devo averlo fatto prima ma sono nuovo in questo sito :) – jad001

3

Puoi provare questo secondo la documentazione ufficiale.

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

Official Mongo DB Driver Java documentation

Problemi correlati