Как добавить это значение ключа в массив в mongo db?

Данный 1-й блок кода - это образец данных, а второй блок - мой желаемый результат. Какой запрос необходим для добавления полей Статистика машины в MongoDB Итак, мой желаемый результат таков (в основном добавление всех полей в массив статистика машины)

{
    "date" : ISODate("2022-04-01T00:00:00.000Z"),
    "intervalName" : "Shift A",
    "operatorId" : "85875678",
    "__v" : 0,
    "clientId" : "ywegduywy",
    "createdAt" : ISODate("2022-05-05T07:33:08.183Z"),
    "deleted" : false,
    "machineStats" : [ 
        {
            "idleTime" : 10,
            "breaks" : 10,
            "loading" : 10,
            "unloading" : 10,
            "runtime" : 11,
            "total" : 100,
            "activity" : {}
        }, 
        {
            "idleTime" : 10,
            "breaks" : 10,
            "loading" : 10,
            "unloading" : 10,
            "runtime" : 10,
            "total" : 100,
            "activity" : {}
        }
    ],
    "plantId" : "AACCS3034M-SEZ-01",
    "totalActivity" : 10,
    "totalAll" : 100,
    "totalBreaks" : 10,
    "totalIdleTime" : 10,
    "totalLoadUnload" : 10,
    "totalRuntime" : 10,
    "updatedAt" : ISODate("2022-05-05T07:33:30.213Z")
}

Желаемый результат, который я хочу (в основном добавление всех полей в массив статистика машины, кроме действий)

{
    "date" : ISODate("2022-04-01T00:00:00.000Z"),
    "intervalName" : "Shift A",
    "operatorId" : "495632582487",
    "__v" : 0,
    "clientId" : "AACCS3034M",
    "createdAt" : ISODate("2022-05-05T07:33:08.183Z"),
    "deleted" : false,
    "machineStats" : [ 
        {
            "idleTime" : 20,
            "breaks" : 20,
            "loading" : 20,
            "unloading" :20,
            "runtime" : 21,
            "total" : 200,
            "activity" : {}
        }, 
       
    ],
    "plantId" : "AACCS3034M-SEZ-01",
    "totalActivity" : 10,
    "totalAll" : 100,
    "totalBreaks" : 10,
    "totalIdleTime" : 10,
    "totalLoadUnload" : 10,
    "totalRuntime" : 10,
    "updatedAt" : ISODate("2022-05-05T07:33:30.213Z")
}

Это зависит. Вы можете использовать $unwind и $group или просто использовать $map. Почему ожидаемый результат "machineId": "VIC-AUTO-0173", а не "VIC-AUTO-0172"? Это произвольно?

nimrod serok 17.05.2022 09:14

имеет смысл иметь машинный идентификатор в желаемом выводе

Alex 17.05.2022 09:16

Извините, это был просто идентификатор машины, который не нужно добавлять. Я обновил вопрос.

Rahul Pandey 17.05.2022 09:16

@Alex Извините, это был просто идентификатор машины, которую не нужно добавлять .. я обновил вопрос

Rahul Pandey 17.05.2022 09:17

А активность? Что произойдет, если в одном из них есть активность?

nimrod serok 17.05.2022 09:26

@nimrodserok Спасибо за ваш ответ. Нет необходимости в активности, так как в большинстве случаев он будет пустым.

Rahul Pandey 17.05.2022 09:28
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
6
21
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать методы карта и уменьшать для выполнения такого рода вычислений в запросе монго.

Ответ принят как подходящий

Один из способов сделать это — использовать $reduce для перебора массива и добавления данных каждого элемента к кумулятивным данным, например:

db.collection.aggregate([
  {
    $set: {
      machineStats: {
        $reduce: {
          input: "$machineStats",
          initialValue: {
            idleTime: 0,
            breaks: 0,
            loading: 0,
            unloading: 0,
            runtime: 0,
            total: 0
          },
          in: {
            idleTime: {$add: ["$$value.idleTime", "$$this.idleTime"]},
            breaks: {$add: ["$$value.breaks", "$$this.breaks"]},
            loading: {$add: ["$$value.loading", "$$this.loading"]},
            unloading: {$add: ["$$value.unloading", "$$this.unloading"]},
            total: {$add: ["$$value.total", "$$this.total"]},
            runtime: {$add: ["$$value.runtime", "$$this.runtime"]}
          }
        }
      }
    }
  }
])

Пример детской площадки.

Другой вариант — использовать $unwind и $group, но он должен быть менее эффективным для этого конкретного запрошенного вывода.

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