2015-08-09 2 views
0

У меня есть несколько следующих json-документов в коллекции mongo db под названием GOT, и я хочу индексировать элементы массива вложенных массивов metaTag в каждом документе в коллекции GOT.Индексирование mongodb json document java driver

Json document

Я попытался следующие:

BasicDBObject index = new BasicDBObject("season.questions.questionEntry.metaTags",1); 
mongoColl.createIndex(index); 

Я не уверен, если это точечная нотация является правильным способом для идентификации элемента в МОЕЙ JSon документе индекса? Как узнать, успешно ли был создан индекс?

Edit: добавлен мой запрос:

 // Query our collection documents metaTag elements for a matching string 
// @SuppressWarnings("deprecation") 
public void queryMetaTags(String query) 
{ 
    // Query to search all documents in current collection 
    List<String> continentList = Arrays.asList(new String[]{query}); 
    DBObject matchFields = new 
     BasicDBObject("season.questions.questionEntry.metaTags", 
     new BasicDBObject("$in", continentList)); 
    DBObject groupFields = new BasicDBObject("_id", "$_id").append("questions", 
     new BasicDBObject("$push","$season.questions")); 
    //DBObject unwindshow = new BasicDBObject("$unwind","$show"); 
    DBObject unwindsea = new BasicDBObject("$unwind", "$season"); 
    DBObject unwindepi = new BasicDBObject("$unwind", "$season.questions"); 
    DBObject match = new BasicDBObject("$match", matchFields); 
    DBObject group = new BasicDBObject("$group", groupFields); 
    @SuppressWarnings("deprecation") 
    AggregationOutput output = 
    mongoColl.aggregate(unwindsea,unwindepi,match,group); 

    String jsonString = null; 
    JSONObject jsonObject = null; 
    jsonResultsArray = null; 
    ourResultsArray = new ArrayList<JSONObject>(); 

    // Loop for each document in our collection 
    for (DBObject result : output.results()) 
    {  
     try 
     { 
      // Parse our results so we can add them to an ArrayList 
      jsonString = JSON.serialize(result);    
      jsonObject = new JSONObject(jsonString); 
      jsonResultsArray = jsonObject.getJSONArray("questions"); 

      // Put each of our returned questionEntry elements into an ArrayList 
      for (int i = 0; i < jsonResultsArray.length(); i++) 
      { 
       System.out.println("jsonResultsArray element (" + i + "): " + jsonResultsArray.getJSONObject(i).toString()); 
       ourResultsArray.add(jsonResultsArray.getJSONObject(i));   
       //System.out.println("ourResultsArray element (" + i + "): " + ourResultsArray.get(i).toString()); 
      } 
     } 
     catch (JSONException e1) 
     { 
      e1.printStackTrace(); 
     } 
    } 
} 
+0

Возможный дубликат [Создать индекс с помощью MongoDb] (http://stackoverflow.com/questions/14006294/create-an-index-with-mongodb) – ka4eli

ответ

1

Вы можете использовать следующие Java кода для индексирования на нужную клавишу:

Mongo mongo = new Mongo("localhost", 27017); 
    DB db = mongo.getDB("dbName"); //set dbname name here 

    DBCollection collection = db.getCollection("collectionName"); 
    collection.createIndex(new BasicDBObject("season.questions.questionEntry.metaTags",1)); 

Here является подробности об индексации.

+0

@ Vishwas Спасибо за ответ, поскольку я не был уверен, что Точечная запись была правильной. Один вопрос, попробовав этот метод индексирования моих документов (см. Пример в ссылке выше) в этой коллекции, нет разницы в производительности! Поэтому мне интересно, правильно ли это работает? – TripVoltage

+0

Производительность зависит от того, какие поля вы используете для индексирования и запроса. Чтобы повысить производительность, вам нужно создать индекс в правильных полях. вы можете использовать '.explain (« executeStats »)' с вашим запросом, чтобы получить подробную информацию об использовании индекса. например 'db.collection.find ({ваш запрос}). explain (" executionStats ")' – Vishwas

+0

Я добавил свой сложный запрос и не знаю, как создать статистику исполнения с этим типом запроса? – TripVoltage

Смежные вопросы