首页 > 解决方案 > MongoDB如何删除聚合上的重复项

问题描述

我想通过 NodeJS 中的聚合来选择所有不同的值。例如,我的收藏中有以下文档:

{ city: 'Berlin', date: '12.12.2020' },
{ city: 'London', date: '11.12.2020' },
{ city: 'Berlin', date: '10.12.2020' },
{ city: 'Paris', date: '09.12.2020' },
{ city: 'Barcelona', date: '08.12.2020' },
{ city: 'Rome', date: '07.12.2020' },
{ city: 'Moscow', date: '06.12.2020' }

结果应该是最近 3 个访问城市(不同城市)的列表。

需要明确的是,我喜欢得到一个与这个类似的查询:

SELECT * FROM visits GROUP BY city ORDER BY date DESC LIMIT 3;

预期结果应如下所示:

{ city: 'Berlin', date: '12.12.2020' },
{ city: 'London', date: '11.12.2020' },
{ city: 'Paris', date: '09.12.2020' }

我做了什么?只是基本查询:

mongodb.collection('visits').aggregate([ ..., { $limit: 3 }]);

我需要哪个语句才能达到这个结果?

标签: node.jsmongodb

解决方案


您可以使用以下$group语句:

mongodb.collection('visits').aggregate([
    {
        $sort: {
            date: -1
        } 
    },
    { 
        $group: {
            _id: $city,
            date: { $first: $date }
        }
    }, 
    {
        $project: {
            city: $city,
            date: $date,
            _id: 0
        }
    },
    { 
        $limit: 3 
    }
]);

PS:您应该使用正确的Datemongodb 对象进行排序才能正常工作


推荐阅读