2012-07-15 22 views
8

Quiero crear el índice compuesto de Age y Name en MongoDB a través del controlador Java y aquí es mi sintaxis:¿Cómo crear un índice compuesto en MongoDB a través del controlador de Java?

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

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

pero Crear sólo 1 índice no Compund índice y me dan resultado esto:

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

Entonces, ¿cómo se puede crear el índice compund en la colección a través del controlador java?

Respuesta

26

Si mira su código, en realidad ha llamado al ensureIndex con dos parámetros. Su primer parámetro fue la clave y su segundo parámetro se convirtió en un campo adicional: Name: -1.

Lo que está tratando de pasar en el primer parámetro es este objeto {"Age":1, "Name":-1}. Lo que en realidad pasaste fue {"Age":1}, {"Name":-1}.

Así que quieres hacer algo como esto:

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

Tenga en cuenta que el índice se crea con un nombre por defecto. Para proporcionar un nombre específico, haga lo siguiente:

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

Muchas gracias Gates, que funcione :) – jad001

+6

En Stackoverflow, consigo puntos si marca la respuesta como correcta y/o votar para arriba. También les dice a otras personas que esta fue la respuesta correcta. ¿Serías capaz de hacer eso? –

+0

¿por qué no @Gates! lo siento, debo haberlo hecho antes, pero soy nuevo en este sitio :) – jad001

3

Puede intentarlo de acuerdo con la documentación oficial.

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

Official Mongo DB Driver Java documentation

Cuestiones relacionadas