2016-06-13 8 views
0

Из system.profile коллекции У меня есть документы, как это:Как получить только определенные поля из документа Mongodb?

{ 
    "op" : "command", 
    "ns" : "..", 
    "command" : { 
     "count" : "..", 
     "query" : { 
      "$and" : [ 
       ... 
      ] 
     } 
    }, 
    "responseLength" : 48, 
    "millis" : 18, 
} 

Некоторые запросы не имеют поле команды вместо них есть поле «запрос». Я хочу проверить, существует ли поле команды. Если это так, добавьте это к моему объекту Stringbuilder, если не добавьте «запрос».

UPDATE:
Я пытался использовать Проекция как предложено Давиде по-прежнему, но я не найти способ проверки, если запрос существует, если он затем добавляет, что.

DBCollection collection = mongoTemplate.getCollection("system.profile"); 
DBObject query = new BasicDBObject("command", new BasicDBObject("$exists",true)); 
BasicDBObject fields = new BasicDBObject("command",1).append("millis", 1).append("ts", 1); 
DBCursor cursor = collection.find(query, fields); 
while(cursor.hasNext()) { 
    sb.append(cursor.next()); 
    sb.append(System.getProperty("line.separator")); 
    } 
return sb; 

}

ответ

3

Вы должны использовать следующие method:

public DBCursor find(DBObject query, DBObject projection); 

От java doc:

проекция - определяет, какие поля MongoDB будет возвращаться из документов набор результатов.

+0

Ответ на правильность ответа на вопрос! –

+0

Я попытался использовать Projection, как вы предлагали. Вы можете увидеть мое обновление по моему вопросу? Единственная проблема заключается в том, что я могу получить определенные поля, но я не понимаю, как заставить его работать для проверки наличия поля запроса. Что бы я ни писал, работает, если существует «команда». Если «запрос» существует, тогда не будет поля «команда». – Rthp