У меня есть следующие типы запросов .
server/controllerName/access_id/id/field/field_value/api_name
server/controllerName/access_id/id/field/field_value/field2/field_value/api_name
Несколько примеров полей:
1. start date and end date
2. user name
3. user group
Формат данных Mongo DB:
Mongo DB хранит детали заказа пользователя. Каждый заказ содержит детали пользователя [10 полей] и детали заказа [30 полей]
По умолчанию API должен отдавать последние 30 дней заказов, если дата не указана.
Мой вопрос:
Как я могу эффективно прочитать эти данные из mongo db?
Что я сейчас делаю:
Я анализирую httprequest
и добавляю эти поля к map
{"name":"gibbs", "category":"vip"}
Мне нужно получить все документы, где эти два поля совпадают, и вернуть документы в следующей форме.
{
user: "gibbs",
total_Result: 10,
[
{
//order details items from doc 1
}
{
//order details from doc2
}
]
}
Я запрашиваю Монго ДБ следующим образом.
MongoCollection<Document> mongoEngCollection = mongoDbReader.getCollection();
BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
//Forming query using request parameter. requestAttributes contains map of request parameters.
for(Map.Entry<PathAttribute, PathValue<?>> entry : requestAttributes.entrySet()) {
String key = entry.getKey().getName();
obj.add(new BasicDBObject(key, entry.getValue().getRawValue()));
}
andQuery.put("$and", obj);
//Queryng mongo db
FindIterable<Document> documents = mongoEngCollection.find(andQuery);
Затем я перебираю документы и группирую поля в нужном формате.
Это написано с помощью весны.
Я в порядке с изменениями схемы, запросов, методов аннотаций, если это очень быстро и концептуально правильно.
Пожалуйста, сообщите мне.