В этой статье блога мы углубимся в различные методы группировки данных по дате в MongoDB. Независимо от того, работаете ли вы над аналитикой, отчетностью или любым другим приложением, использующим данные на основе времени, понимание того, как группировать и агрегировать данные по дате, имеет решающее значение. Мы рассмотрим различные подходы на примерах кода, чтобы продемонстрировать их использование. Давайте начнем!
Метод 1: конвейер агрегации с $group и $dateToString:
db.collection.aggregate([
{
$group: {
_id: {
year: { $year: "$dateField" },
month: { $month: "$dateField" },
day: { $dayOfMonth: "$dateField" }
},
count: { $sum: 1 }
}
}
]);
Метод 2: конвейер агрегации с $project и $dateToString:
db.collection.aggregate([
{
$project: {
_id: 0,
date: {
$dateToString: {
format: "%Y-%m-%d",
date: "$dateField"
}
},
count: 1
}
},
{
$group: {
_id: "$date",
totalCount: { $sum: "$count" }
}
}
]);
Метод 3. Конвейер агрегации с $dateFromString и $dateToParts:
db.collection.aggregate([
{
$project: {
parts: { $dateToParts: { date: "$dateField" } },
count: 1
}
},
{
$group: {
_id: {
year: "$parts.year",
month: "$parts.month",
day: "$parts.day"
},
totalCount: { $sum: "$count" }
}
}
]);
Метод 4: Map-Reduce:
var mapFunction = function() {
var key = {
year: this.dateField.getFullYear(),
month: this.dateField.getMonth() + 1,
day: this.dateField.getDate()
};
emit(key, 1);
};
var reduceFunction = function(key, values) {
return Array.sum(values);
};
db.collection.mapReduce(mapFunction, reduceFunction, { out: "result" });
Метод 5: агрегирование с помощью $bucket:
db.collection.aggregate([
{
$bucket: {
groupBy: "$dateField",
boundaries: [
ISODate("yyyy-MM-ddThh:mm:ssZ"), // Specify the date boundaries
ISODate("yyyy-MM-ddThh:mm:ssZ"),
// Add more boundaries as needed
],
default: "Other",
output: {
totalCount: { $sum: 1 }
}
}
}
]);
В этой статье мы рассмотрели несколько методов группировки данных по дате в MongoDB. Мы рассмотрели конвейер агрегации с помощью $group и $dateToString, $project и $dateToString, $dateFromString и $dateToParts, Map-Reduce и $bucket. В зависимости от ваших конкретных требований и сложности ваших данных вы можете выбрать наиболее подходящий метод. Понимание этих методов позволит вам выполнять мощные агрегации на основе дат в MongoDB и получать ценную информацию из ваших данных.