#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)
Приведенное выше сокращение решило мою проблему