2013-07-03 5 views
1

Я создаю коллекцию в MongoDB следующим образом, и я хочу создать индекс 2dsphere для местоположения этой коллекции от Java. Но я не могу этого сделать.Индексирование коллекции MongoDB в Java

collection.ensureIndex() метод ожидает DBObject как параметр, но я не могу передать ему его.

Как создать collection.ensureIndex({"location" : "2dsphere"}) в Java код? MongoDB позволяет мне это делать в командной строке. Но я хочу индексировать его через код, написанный на Java.

BasicDBObject doc = new BasicDBObject("attr1", nextLine[0]) 
           .append("attr2", nextLine[1]) 
           .append("edge-metro-code", nextLine[6]) 
           .append("location", new BasicDBObject("type", "Point") 
                  .append("coordinates",latLong)) 
           .append("attr3", nextLine[9]) 
           .append("attr4", nextLine[10]) 

ответ

2

Вы должны построить новый DBObject, который представляет ваш индекс. См. Код ниже:

DBObject index2d = BasicDBObjectBuilder.start("location", "2dsphere").get(); 
DBCollection collection = new Mongo().getDB("yourdb").getCollection("yourcollection"); 
collection.ensureIndex(index2d); 
+0

спасибо Мигель .. Это работало большое – koustubhC

+0

как я использую $ рядом для коллекции, построенной с вышеуказанной структурой документа? Я хочу запустить запрос из java, который имеет $ рядом с ним. Я попробовал QueryBuilder и BasicDbObject, но не смог найти правильное решение для него. Не могли бы вы помочь мне в этом? – koustubhC

3

ensureIndex() отменено сейчас. Вы должны использовать createIndex() вместо:

MongoClient mongoClient = new MongoClient(); 
DBCollection test = mongoClient.getDB("testdb").getCollection("test"); 
test.createIndex(new BasicDBObject("location","2dsphere")); 
Смежные вопросы