【问题标题】:Count of records by Date MongoDB按日期 MongoDB 的记录计数
【发布时间】:2017-04-30 15:46:18
【问题描述】:

这是客户收藏的记录

 {
    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

我希望结果像这样分组。

【问题讨论】:

标签: mongodb


【解决方案1】:

如果你想按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
        }
    }
])

【讨论】:

    【解决方案2】:

    这个比较简单:

    db.getCollection('collectionName').aggregate(
    [
        {
            $group:
            {
                _id: {
                    $dateToString: {
                        "date": "$lastModified",
                        "format": "%Y-%m-%d"
                    }
                }, 
                count: { $sum:1 }
            }
        }
    ])
    

    【讨论】:

      【解决方案3】:

      我在 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]],
      
              ]);
      

      【讨论】:

        【解决方案4】:

        我按以下方式计算我的日期

        样本数据:

        {
            "_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
        }]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-17
          • 2018-12-29
          • 2013-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多