在数据库中找到5个唯一的最新文档

时间:2019-01-19 02:07:30

标签: mongodb mongoose

我正在尝试使端点列出最近的5个条目,而不会为用户返回重复的值。

这是我到目前为止所拥有的:

    SpaceHistory
    .find({owner: req.params.owner})
    .sort({"createdDate": -1})
    .exec(function(err, spaceHistory){
        if(err){
            return res.send(new errors.ServerError(err))
        }
        if(!spaceHistory){
            return res.send(new errors.ResourceNotFoundError('Space History Not Found'))
        }

        res.send(spaceHistory)
    })
}

我的数据如下:

[{
        "_id": "5c42826eb8cba061e8d2eea4",
        "owner": "5c427d3acbf49d4b7cfe8114",
        "space": "5c427de8cbf49d4b7cfe8115",
        "__v": 0,
        "createdDate": "2019-01-19T01:50:38.664Z"
    },
    {
        "_id": "5c428265b8cba061e8d2eea3",
        "owner": "5c427d3acbf49d4b7cfe8114",
        "space": "5c427de8cbf49d4b7cfe8115",
        "__v": 0,
        "createdDate": "2019-01-19T01:50:29.159Z"
    },
    {
        "_id": "5c428215b8cba061e8d2eea2",
        "owner": "5c427d3acbf49d4b7cfe8114",
        "space": "5c427d3acbf49d4b7cfe8114",
        "__v": 0,
        "createdDate": "2019-01-19T01:49:09.875Z"
    }]

我希望它最多返回5个文档,其中“空格”从不重复,并且按最新顺序排序。您将如何处理?

1 个答案:

答案 0 :(得分:0)

当您尝试获取space的唯一值时,

好吧,由于.limit.distinct不能同时使用,您可以尝试 总计:

SpaceHistory.aggregate(
    [   {$match:{owner: req.params.owner}}
        { "$group": { "_id": "$space" } },
        {"$sort":{createdDate:-1}},
        { "$limit": 5 }
    ],
    function(err,results) {
       // results skipped and limited in here
    }
);