Mongodb Mongoose-用于筛选的聚合和分组日期
我对mongoose上的数据聚合有一些问题。如果你能帮忙,我将不胜感激 这是我的数据库(最小化): 以下是我的目标结构:Mongodb Mongoose-用于筛选的聚合和分组日期,mongodb,date,mongoose,aggregation,Mongodb,Date,Mongoose,Aggregation,我对mongoose上的数据聚合有一些问题。如果你能帮忙,我将不胜感激 这是我的数据库(最小化): 以下是我的目标结构: [ [2018,5], [2019,10], [2019,12], [2020,1], [2020,2], [2020,9] ] 目前我的代码是: Model.aggregate([ { $group: { _id: "$year", months: { $
[
[2018,5],
[2019,10],
[2019,12],
[2020,1],
[2020,2],
[2020,9]
]
目前我的代码是:
Model.aggregate([
{ $group: { _id: "$year", months: { $addToSet: "$month" } } }
]);
db.collection.aggregate([
{ $group: { _id: { year: { $year: "$timestamp" }, month: { $month: "$timestamp" } }, total: { $sum: 1 } } },
{ $sort: { "_id.year": -1, "_id.month": -1 } },
])
但我觉得我离我想要达到的目标还很远。
如果您能提供一些见解,我将不胜感激,谢谢大家 5小时后我成功了。
解决方案:
db.collection.aggregate([
{ $group: { _id: { year: { $year: "$timestamp" }, month: { $month: "$timestamp" } }, total: { $sum: 1 } } },
{ $sort: { "_id.year": -1, "_id.month": -1 } },
])
这是你需要的吗@Rfroes87不完全正确。请注意,当您添加新文档时,它们也是如何添加的。我需要唯一的年+月。想象一下,一个博客存在了几年,我想展示一个列表,上面列出了所有写文章的月份。5个小时后,我独自想出了一个解决方案,很快就给出了答案。你不需要
$unwind
(它用于数组)。您可以将排序用作聚合管道的第二阶段:{$sort:{“\u id.year”:-1,“\u id.month”:-1}
。而且,你不需要第三和第四阶段。@prasad_uu你说得对,我会更新答案。谢谢你!它在那里是因为我最初想得到一个不同的数据结构响应,但我放弃了。