#javascript #node.js #mongodb #mongoose #mongodb-query
#javascript #node.js #mongodb #мангуст #mongodb-запрос
Вопрос:
Я хочу создать отчет, в котором я показываю сумму часов еженедельно. Я использую MongoDB и группирую по $ week. Мне нужно различать недели по годам, и в моем отчете должна быть дата для первого дня недели и последнего дня недели вместо номера недели. Вот мой конвейер.
let pipeline = [
{
$match: {
companyId,
},
},
{
$group: {
_id: {
$week: '$date',
},
},
},
{
$project: {
companyId: '$companyId',
},
},];
и вот моя коллекция :
const hoursSchema = mongoose.Schema({
personId: mongoose.Schema.Types.ObjectId,
jobId: Number,
companyId: Number,
name: String,
date: Date,
hours: Number,
});
Комментарии:
1. Вы можете использовать $sum вместе с
$group
, чтобы получить сумму заhours
неделю.2. Я отредактировал свой вопрос, я искал способ преобразовать номер недели в формат даты (первый день недели и последний день недели).
Ответ №1:
в итоге я добавил год и использовал функцию отдельно для извлечения даты из номеров недель и лет. Конвейер выглядит так:
let pipeline = [
{
$match: {
companyId,
},
},
{
$group: {
_id: {
week: { $week: { date: '$date' } },
year: { $year: { date: '$date' } },
name: '$name',
jobTitle: '$jobTitle',
jobId: '$jobId',
companyId: '$companyId',
personId: '$personId',
},
count: { $sum: 1 },
hours: { $sum: '$hours' },
},
},
];
Я помещаю данные пользователя в $group _id для извлечения информации для каждого пользователя. таким образом, каждый мой объект, сгруппированный по объекту, теперь имеет год и неделю, и я мог бы использовать это для вычисления даты для первого и последнего дня недели.