首页 > 解决方案 > Mongodb聚合没有返回正确的日期

问题描述

我正在尝试从 MongoDB(使用 PHP)返回结果,其中我有以下输出:用户名、探险次数、转录次数、上次转录日期

我使用的查询是

$collection->aggregate([
[
    '$match' => [
        'subject_projectId' => (int) $projectId
    ]
],
[
    '$sort' => [
        'classification_finished_at' => -1
    ]
],
[
    '$group' => [
        '_id' => '$user_name',
        'transcriptionCount' => [
            '$sum' => 1
        ],
        'expedition' => [
            '$addToSet' => '$subject_expeditionId'
        ],
        'last_date' => [
            '$first' => '$classification_finished_at'
        ]
    ]
],
[
    '$project' => [
        '_id' => 0,
        'user_name' => '$_id',
        'transcriptionCount' => 1,
        'expeditionCount' => [
            '$size' => '$expedition'
        ],
        'last_date' => 1
    ]
]]);

除了最后一个日期,我得到了正确的回报。它没有给我用户进行转录的最后日期,而是给了我其他日期。不知道给出的日期是什么,我只知道某些用户有更晚的日期。想知道我做错了什么。

标签: mongodbaggregation-framework

解决方案


使用$min$maxlast_date

[
    '$group' => [
        '_id' => '$user_name',
        'transcriptionCount' => [
            '$sum' => 1
        ],
        'expedition' => [
            '$addToSet' => '$subject_expeditionId'
        ],
        'last_date' => [
            '$min' => '$classification_finished_at'
        ]
    ]
]

推荐阅读