Мои данные хранятся для пользователя в следующем формате:
{
name: 'XYZ',
email: 'abc@gmail.com',
password: 'encrypted',
categories: [
{
name: 'category1',
type: 'type1',
},
{
name: 'category2',
type: 'type2',
}
],
transactions: [
{
date: 2020-04-09T06:00:30.000Z,
type: 'type1',
category: 'category1',
description: 'some desc',
},
{
date: 2020-04-08T06:00:30.000Z,
type: 'type2',
category: 'category1',
description: 'some desc',
},
{
date: 2020-04-07T06:00:30.000Z,
type: 'type3',
category: 'category1',
description: 'some desc',
}
]
}
Я хочу получить данные конкретного пользователя после предоставления уникального электронного письма, но наряду с этим я хочу, чтобы транзакции фильтровались между двумя датами. Пример Мне нужны данные пользователя с email = abc@gmail.com
и транзакции dates between 2020-04-08 and 2020-04-09
.
Пример вывода выглядит следующим образом:
{
name: 'XYZ',
email: 'abc@gmail.com',
categories: [...],
transactions: [
{
date: 2020-04-09T06:00:30.000Z,
type: 'type1',
category: 'category1',
description: 'some desc',
},
{
date: 2020-04-08T06:00:30.000Z,
type: 'type2',
category: 'category1',
description: 'some desc',
}]
}
Или только транзакции между указанными датами для данного пользователя электронной почты тоже хорошо.
Попытка с помощью этого запроса
User.aggregate([
{$match: {email: email}},
{$unwind: '$transactions'},
{$match: {'transactions.date': {$gt: startDate, $lt: endDate}}},
{
$group: {
_id: '$_id',
transactions: {
$type: "$transactions.type",
$category: "$transactions.category",
$date: "$transactions.date",
$description: "$transactions.decription"
}
}
}
]).exec((err, data) => {
if (err) throw err;
console.log(data);
})
Получение ошибки следующим образом The field 'transactions' must specify one accumulator