Node.js 使用聚合对嵌套列进行排序

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: {

我在Mongoose中使用聚合框架进行了以下查询:

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
inside
comments
数组对记录进行排序。我使用了
注释。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操作符生成的文档的外观的见解。