Alovinglol
@Alovinglol
front-end developer

Как сделать такую сортировку?

Имеется такой массив данных:
Пример входных данных
[
	{
		date:  ISODate(2017-12-09T21:00:00.000Z),
		items: [
			{
				title: 'Title1',
				price: 500
			},
			{
				title: 'Title2',
				price: 500
			}
		]
	},
	{
		date: ISODate(2017-12-07T21:00:00.000Z)
		items: [
			{
				title: 'Title3',
				price: 500
			},
			{
				title: 'Title1',
				price: 500
			}
		]
	},
	{
		date: ISODate(2017-06-09T21:00:00.000Z),
		items: [
			{
				title: 'Title1',
				price: 500
			},
			{
				title: 'Title2',
				price: 500
			}
		]
	},
	{
		date: ISODate(2017-01-08T21:00:00.000Z),
		items: [
			{
				title: 'Title2',
				price: 500
			},
			{
				title: 'Title3',
				price: 500
			}
		]
	}
]

Нужно сгруппировать по месяцу / году и чтобы айтемы (поле Items) внутри него так-же имели сгруппированный вид т.е. одинаковые названия сгруппировались и поля price сложились в этом случае.
Конкретно в этом примере на выходе нужно иметь похожую структуру:
Пример как должно быть
[
	{
		date: {
			month: 12,
			year: 2017
		},
		items: [
			{
				title: 'Title1',
				price: 1000
			},
			{
				title: 'Title2',
				price: 500
			},
			{
				title: 'Title3',
				price: 500
			}
		]
	},
	{
		date: {
			month: 06,
			year: 2017
		},
		items: [
			{
				title: 'Title1',
				price: 500
			},
			{
				title: 'Title2',
				price: 500
			}
		]
	},
	{
		date: {
			month: 01,
			year: 2017
		},
		items: [
			{
				title: 'Title2',
				price: 500
			},
			{
				title: 'Title3',
				price: 500
			}
		]
	}
]


Вот что я пытался сделать и из чего естественно ничего не получилось:
Мои потуги
[
		{
			'$match': {}
		},
		{
			$project: {
				date: 1,
				items: 1
			}
		},
		{
			$unwind: {
				path: '$items'
			}
		},
		{
			$group: {
				_id : {
					month: { $month: '$date' },
					year: { $year: '$date' }
				},
				items: {
					$addToSet: {
						title: '$items.title',
						price: {$sum: '$items.price'}
					}
				}
			}
		}
	]
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы