如何排序然后限制猫鼬中的结果数组?

Alittletf

我有一个用户集合,其中包含每个用户的大量属性。一个属性是一个数组('guestlist_submitted'),我试图根据日期字段返回该数组中的最新3个项目。

使用Mongoose,我可以将特定属性定位到用户对象上,但似乎无法对其进行限制或排序。

我已经尝试使用slice和日期计算来返回最近的3个整数,但是我一直在努力使它正确,并且不确定什么地方出错了。

我已经尝试在查询构建器上使用排序/限制,但是我了解到尽管我在查询构建器中说了“ select('guestlist_submitted')”,但这些不适用于我所针对的属性内的数组。

当我只针对用户对象的属性返回结果时,它是一个数组,其中包含一个对象,该对象中包含另一个数组。我在遍历它以定位内部数组以使用切片和日期排序时遇到问题。

第一次尝试

    Users.
    find({ fbid: req.query.fbid}).
    select('guestlist_submitted -_id').
    sort({"guestlist_submitted.date": 'desc'}).
    limit(3).
    exec((err, result) => {
        if (err) throw (err));
        if (result) {

            res.send(result);

        }

第二次尝试:

    Users.
    find({ fbid: req.query.fbid}).
    select('guestlist_submitted -_id').
    exec((err, result) => {
        if (err) res.send(JSON.stringify(err));
        if (result) {

            const slicedArr = result.guestlist_submitted.slice(0,1);

            const sortedResultArr = slicedArr.sort(function(a,b){return new Date(b.date) - new Date(a.date); });

            const newResultArr = sortedResultArr.slice(0, 2);

            res.send(newResultArr);

        }

我能得到的最好的是'guestlist_submitted'和整个数组,而不是排序的,它在数组内的对象内。

我希望输出是可以在客户端上显示的新数组中guestlist_submitted数组的3个最新结果。

预先感谢您的帮助

编辑-找出解决方案

我最终想出如何使用aggregate()获得想要的东西

Users.aggregate([

    {
        $match:  {fbid: req.query.fbid}
    },
    {
        $unwind: "$guestlist_submitted"
    },
    {
        $sort: {'guestlist_submitted.date': -1}
    },
    {
        $limit: 2
    },
    {
        $group: {_id: '$_id', guestlist_submitted: {$push: '$guestlist_submitted'}}

    },
    {
        $project: { guestlist_submitted: 1, _id: 0 }

    }


]).exec((err, result) => {
    if (err) res.send(JSON.stringify(err));
    if (result) {

        console.log(result);
        res.send(result);
    }

}); 
Alittletf

我最终想出如何使用aggregate()获得想要的东西

Users.aggregate([

    {
        $match:  {fbid: req.query.fbid}
    },
    {
        $unwind: "$guestlist_submitted"
    },
    {
        $sort: {'guestlist_submitted.date': -1}
    },
    {
        $limit: 2
    },
    {
        $group: {_id: '$_id', guestlist_submitted: {$push: '$guestlist_submitted'}}

    },
    {
        $project: { guestlist_submitted: 1, _id: 0 }

    }


]).exec((err, result) => {
    if (err) res.send(JSON.stringify(err));
    if (result) {

        console.log(result);
        res.send(result);
    }

}); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章