Node.js 使用聚合对嵌套列进行排序
我在Mongoose中使用聚合框架进行了以下查询:Node.js 使用聚合对嵌套列进行排序,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在Mongoose中使用聚合框架进行了以下查询: Comment.aggregate([{ $match: { isActive: true } }, { $group: { _id: { year: { $year: "$creationDate" }, month: { $month: "$creationDate" }, day: {
Comment.aggregate([{
$match: {
isActive: true
}
}, {
$group: {
_id: {
year: {
$year: "$creationDate"
},
month: {
$month: "$creationDate"
},
day: {
$dayOfMonth: "$creationDate"
}
},
comments: {
$push: {
comment: "$comment",
username: "$username",
creationDate: "$creationDate",
}
}
}
}, {
$sort: {
'comments.creationDate': -1
}
}, {
$limit: 40
}], function (err, comments) {
//...
});
最后,我想使用creationDate
insidecomments
数组对记录进行排序。我使用了注释。creationDate
但它不起作用
使用聚合框架对项目进行排序的正确方法是什么?您需要将
$sort
移动到creationDate
上的$group
上方,以便影响使用$push
构建注释
数组的顺序。现在,您正在对整个文档集进行排序,而不是对数组进行排序
Comment.aggregate([{
$match: {
isActive: true
}
}, {
$sort: {
creationDate: -1
}
}, {
$group: {
_id: {
year: {
$year: "$creationDate"
},
month: {
$month: "$creationDate"
},
day: {
$dayOfMonth: "$creationDate"
}
},
comments: {
$push: {
comment: "$comment",
username: "$username",
creationDate: "$creationDate",
}
}
}
}, {
$limit: 40
}], function (err, comments) {
//...
});
我认为您没有正确地使用聚合框架,尤其是
组
部分(尽管我可能错了)。为什么要多次指定creationDate
值。我还认为,从语法上讲,你不能说$year
或$month
,因为$
对于这样的变量不能在左侧(我认为)。@信任这里,我想在特定的日期、月份和年份对记录进行分组。分组方式可以很好地工作,但排序不起作用。好的,或许可以在排序之前尝试使用展开
管道来展开注释
。同样,我不确定这是否正是您必须要做的,但只是抛出一些想法。@Trust让我试试,谢谢您的建议。顺便说一句,$sort在我看来还可以,也许使用$out操作符可以显示一些有关您的$group操作符生成的文档的外观的见解。