[英]Count of records by Date MongoDB
這是一個創紀錄的客戶集合
{
name: xyz,
.
.
.
createdAt: Sun Nov 20 2016 00:00:00 GMT+0530 (IST)
lastModified: Sat Dec 10 2016 00:00:00 GMT+0530 (IST)
}
我需要能夠統計根據日期修改的客戶數
eg: Date Count(lastModified)
11-20-2016 10
12-20-2016 7
13-20-2016 9
我希望結果像這樣分組。
如果您想按lastModified
日期和時間進行計數,則可以像這樣使用:
db.getCollection('collectionName').aggregate({$group:{_id: "$lastModified", count:{$sum:1}}})
如果您只想按lastModified
日期計數,則可以使用如下:
db.getCollection('collectionName').aggregate(
[
{
$group:
{
_id:
{
day: { $dayOfMonth: "$lastModified" },
month: { $month: "$lastModified" },
year: { $year: "$lastModified" }
},
count: { $sum:1 },
date: { $first: "$lastModified" }
}
},
{
$project:
{
date:
{
$dateToString: { format: "%Y-%m-%d", date: "$date" }
},
count: 1,
_id: 0
}
}
])
這更簡單:
db.getCollection('collectionName').aggregate(
[
{
$group:
{
_id: {
$dateToString: {
"date": "$lastModified",
"format": "%Y-%m-%d"
}
},
count: { $sum:1 }
}
}
])
我通過這個在 yii2 中對它進行了排序
$aggregateResult = Yii::$app->mongodb->getCollection('patient')->aggregate([
[
'$match' => [
'$and' => [
['deleted_at' => ['$exists' => false]],
['registration_date' => ['$gte' => $startDateStamp, '$lte' => $endDateStamp]],
]
]
],
[
'$group' => [
'_id' => [
'day' => ['$dayOfMonth' => ['$toDate' => ['$multiply' => ['$registration_date', 1000]]]],
'month' => ['$month' => ['$toDate' => ['$multiply' => ['$registration_date', 1000]]]],
'year' => ['$year' => ['$toDate' => ['$multiply' => ['$registration_date', 1000]]]]
],
'count' => ['$sum' => 1],
'date' => ['$first' => ['$toDate' => ['$multiply' => ['$registration_date', 1000]]]]
]
],
[
'$project' => [
'date' => ['$dateToString' => ['format' => '%Y-%m-%d', 'date' => '$date']],
'count' => 1,
'_id' => 0
]
],
['$sort' => ['date' => 1]],
]);
我按以下方式計算了我的日期
樣本數據:
{
"_id" : ObjectId("5f703ef9db38661df02d3a77"),
"color" : "black",
"icon" : "grav",
"name" : "viewed count",
"created_date" : ISODate("2020-09-27T07:27:53.816Z"),
"updated_date" : ISODate("2021-05-11T19:11:14.415Z"),
"read" : false,
"graph" : [
{
"_id" : ObjectId("5f704286db38661df02d3a81"),
"count" : 1,
"date" : ISODate("2020-09-27T07:43:02.231Z")
},
{
"_id" : ObjectId("5f7043ebdb38661df02d3a88"),
"date" : ISODate("2020-09-27T07:48:59.383Z"),
"count" : 2
}]
}
我的查詢是:
db.test.aggregate(
[{$match:{"name" : "viewed count"}},
{$unwind:'$graph'},
{
$match: {
'graph.date': {
$gt: ISODate("2018-09-27"),
$lt: ISODate("2021-09-27")
}
}
},
{
$project: {
date: {$dateToString: {format: '%Y-%m-%d', date: '$graph.date'}}
},
},
{
$group: {
_id: "$date",
count: {$sum: 1}
}
},
{
$sort: {
_id: 1
}
}
]
)
輸出:
[{
"_id" : "2020-09-27",
"count" : 58.0
},
{
"_id" : "2020-09-29",
"count" : 50.0
}]
Mongo 實際上有一個 function dateTrunc
從 5.0.0 版本開始直接執行此操作
db.getCollection('collectionName').aggregate([
{
$group: {
_id: {
$dateTrunc: {
date: "$lastModified", unit: "day"
}
},
count: {$sum: 1}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.