node.js - 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 }]);
我需要哪个语句才能达到这个结果?
解决方案
您可以使用以下$group
语句:
mongodb.collection('visits').aggregate([
{
$sort: {
date: -1
}
},
{
$group: {
_id: $city,
date: { $first: $date }
}
},
{
$project: {
city: $city,
date: $date,
_id: 0
}
},
{
$limit: 3
}
]);
PS:您应该使用正确的Date
mongodb 对象进行排序才能正常工作
推荐阅读
- smpp - 如何在 kannel 上设置registred_delivery
- python - 声明式查询中的 Python Pony ORM 单行属性
- sql - sql将字符串拆分为始终相同数量的片段
- plsql - 两点之间的PLSQL距离
- google-bigquery - 错误:错误的例程引用“OFFSET”;标准 SQL 视图中的例程引用需要明确的项目 ID
- c# - 如何使用列表
() 隐藏私有字段? - java - 我应该如何处理对底层数据结构中的排序敏感的 UnnecessaryStubbingException?
- java - Log4J2 自定义记录器
- instagram - 如何嵌入 instagram 轮播视频
- python - 绘图帮助 - Python