Группировать и сохранять исходные поля

#mongodb #aggregation-framework

#mongodb #агрегация-фреймворк

Вопрос:

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

Предположим, у меня есть эти данные

 [
   { name: "My Plan 101", billingCycle: 'day', amount: 1, credits: 100, price: 7 },
   { name: "My Plan 102", billingCycle: 'day', amount: 1, credits: 150, price: 10 },
   { name: "My Plan 103", billingCycle: 'day', amount: 2, credits: 150, price: 15 },
   { name: "My Plan 104", billingCycle: 'month', amount: 3, credits: 150, price: 15 },
   { name: "My Plan 105", billingCycle: 'month', amount: 3, credits: 200, price: 20 },
]
  

Тогда агрегация должна быть такой

 [
    'day': { 
        '1': [{ name: 'My Plan 101' }, { name: 'My Plan 102' }],
        '2': [{ name: 'My Plan 103' }]
    },
    'month': {
        '3': [{ name: 'My Plan 104' }, { name: 'My Plan 105' }]
    }
]


  

Комментарии:

1. ваш ожидаемый результат не является допустимым json, вы не можете получить объект в качестве ключа.

2. @matthPen Я обновил структуру JSON

Ответ №1:

Я много пробовал с агрегацией mongodb, но не смог ее решить, поэтому я использовал Lodash для этого.

 let plans = await Plan.find()
plans = _.groupBy(plans, 'billingCycle');

for (const billingCyle in plans) {
  let $plans = plans[billingCyle];
  plans[billingCyle] = _.groupBy($plans, "amount")
}
console.log(plans)
  

Приведенное выше сокращение решило мою проблему