Вложенные запросы в базе данных mongodb

Я немного новичок в mongodb, а также в java. Я хочу запросить время перерыва ключа и найти сумму значения.

 db.users90.find().pretty()
{
    "_id" : ObjectId("5ad5f2e2f58a542f7989e8fc"),
    "date" : "2018-04-17",
    "break" : [
            {
                    "out" : "18:00",
                    "in" : "18:40",
                    "breaktime" : "0:40"
            },
            {
                    "out" : "19:00",
                    "in" : "19:30",
                    "breaktime" : "0:30"
            }
    ]
}

Мне нужна помощь в java, чтобы добавить эти 2 ключа времени перерыва (в некоторых случаях это может быть n количество документов в перерыве) 0: 40 + 0: 30 = 0:70 минут

Спасибо, Мохан

Если вы хотите добавить их, почему вы храните их как строку?

Rahul Raj 17.04.2018 16:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
47
1

Ответы 1

Хотя запрос, который вам нужен, прост, хранение значений "времени перерыва" как String без всякой причины делает все трудным и сложным.

Итак, предполагая, что вы сохранили эти значения как числа например двойной, вы можете легко выполнить свой запрос на Java следующим образом;

AggregateIterable aggregationQuery = collection.aggregate(Arrays.asList(
        new Document("$match", new Document("date","yourDate")), // match a document with a specific date
        new Document("$unwind", "$break"), // decompose the 'break' array
        new Document("$group", new Document("_id", null).
              append("totalBreakTime", new Document("$sum","$break.breaktime")) 
)));
if (aggregationQuery.iterator().hasNext()){
      double totalBreakTime = ((Document)aggregationQuery.iterator().next()).get("break",Document.class).getDouble("breakTime");
}

Другие вопросы по теме