2012-07-15 10 views
8

Chcę utworzyć indeks złożony na Age i Name w MongoDB przez kierowcę Java i tu jest moja składnia:Jak utworzyć indeks złożony w MongoDB za pośrednictwem sterownika Java?

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

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

ale tworzyć tylko 1 indeks nie compund indeks i dać mi prowadzić następująco:

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

W jaki sposób można skompilować indeks na kolekcji za pomocą sterownika Java?

Odpowiedz

26

Jeśli spojrzeć na kod, to faktycznie nazywa ensureIndex z dwoma parametrami. Twój pierwszy parametr był kluczem, a twój drugi parametr stał się dodatkowym polem: Name: -1.

Co szukasz zdać w pierwszym parametrze jest to obiekt {"Age":1, "Name":-1}. Rzeczywiście minął {"Age":1}, {"Name":-1}.

więc chcesz zrobić coś takiego:

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

Należy zauważyć, że indeks zostanie utworzony z domyślną nazwą. Aby podać konkretną nazwę, wykonaj następujące czynności:

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

dziękuję Gates, to działa :) – jad001

+6

W Stackoverflow, otrzymuję punkty, jeśli oznaczyć jako odpowiedź prawidłowa i/lub głosować go. Mówi także innym ludziom, że to była poprawna odpowiedź. Czy byłbyś w stanie to zrobić? –

+0

dlaczego nie @Gates! Przepraszam, że musiałem zrobić wcześniej, ale jestem nowy na tej stronie :) – jad001

3

Możesz to wypróbować zgodnie z oficjalną dokumentacją.

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

Official Mongo DB Driver Java documentation

Powiązane problemy