2015-12-02 25 views
2

hyy那里,我的集合就像这样,我试图按照排序的日期获取特定blog_id的所有评论列表。以排序的形式从多个文档返回内部数组元素

[ 
{ 
    "_id" : ObjectId("565f0f5d77f0c7bd11bbadd8"), 
    "blog_id" : ObjectId("56587befdb7224110f007233"), 
    "comments" : [ 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "pradip is bhole baba", 
      "_id" : ObjectId("565f0f5d77f0c7bd11bbadd9"), 
      "dt" : ISODate("2015-12-02T15:33:49.578Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "honkog pokhara... he he ha ha", 
      "_id" : ObjectId("565f1034fd07cbfc1129db0b"), 
      "dt" : ISODate("2015-12-02T15:37:24.581Z") 
     } 
    ], 
    "record_count" : 2, 
    "__v" : 0 
} 


{ 
    "_id" : ObjectId("565efa37635f09900d21a339"), 
    "blog_id" : ObjectId("56587befdb7224110f007233"), 
    "comments" : [ 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "wat a nice car wow", 
      "_id" : ObjectId("565efa37635f09900d21a33a"), 
      "dt" : ISODate("2015-12-02T14:03:35.289Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "love is life budikhola ma dives", 
      "_id" : ObjectId("565efa76635f09900d21a33b"), 
      "dt" : ISODate("2015-12-02T14:04:38.661Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "bholi ajaya ko bihe", 
      "_id" : ObjectId("565efaa0635f09900d21a33c"), 
      "dt" : ISODate("2015-12-02T14:05:20.847Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "manish is nice", 
      "_id" : ObjectId("565efb17635f09900d21a33d"), 
      "dt" : ISODate("2015-12-02T14:07:19.704Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "niroj is cool", 
      "_id" : ObjectId("565efd53c22dddc80e8f461c"), 
      "dt" : ISODate("2015-12-02T14:16:51.730Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "ramesh is cool", 
      "_id" : ObjectId("565f0d376d82e24c11f6c0d1"), 
      "dt" : ISODate("2015-12-02T15:24:39.010Z") 
     } 
    ], 
    "record_count" : 6, 
    "__v" : 0 
} 
] 

我想列出特定blog_id的所有评论递减日期顺序像下面

 

    

[ 

     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "wat a nice car wow", 
      "_id" : ObjectId("565efa37635f09900d21a33a"), 
      "dt" : ISODate("2015-12-02T14:03:35.289Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "love is life budikhola ma dives", 
      "_id" : ObjectId("565efa76635f09900d21a33b"), 
      "dt" : ISODate("2015-12-02T14:04:38.661Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "bholi ajaya ko bihe", 
      "_id" : ObjectId("565efaa0635f09900d21a33c"), 
      "dt" : ISODate("2015-12-02T14:05:20.847Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "manish is nice", 
      "_id" : ObjectId("565efb17635f09900d21a33d"), 
      "dt" : ISODate("2015-12-02T14:07:19.704Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "niroj is cool", 
      "_id" : ObjectId("565efd53c22dddc80e8f461c"), 
      "dt" : ISODate("2015-12-02T14:16:51.730Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "ramesh is cool", 
      "_id" : ObjectId("565f0d376d82e24c11f6c0d1"), 
      "dt" : ISODate("2015-12-02T15:24:39.010Z") 
     } 
       { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "pradip is bhole baba", 
      "_id" : ObjectId("565f0f5d77f0c7bd11bbadd9"), 
      "dt" : ISODate("2015-12-02T15:33:49.578Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "honkog pokhara... he he ha ha", 
      "_id" : ObjectId("565f1034fd07cbfc1129db0b"), 
      "dt" : ISODate("2015-12-02T15:37:24.581Z") 
     } 
] 

 

我怎样才能做到这一点mongooes或MongoDB中

我试过这个

BlogComments.aggregate([ 

      {$match:{blog_id:blogId}}, 
      { 
       $group:{ 
        _id:statusId,comment_count:{$sum:"$record_count"},comments:{$push:"$comments"} 
       } 
      }, 
      { "$unwind": "$comments" }, 
      { "$unwind": "$comments" }, 


      { "$group": { 
       "_id": statusId, 
       "comment_count": { "$first": "$comment_count" }, 
       "comments": { "$addToSet": "$comments" } 
      }}, 
      { $sort: {'comments._id': 1}} 


     ]); 

此查询给出了来自多个文档b的评论和所有关联评论ut评论是随机的顺序。 $排序不适合我的工作

谢谢你提前。

+1

约翰,你尝试过什么吗? – inspired

+0

是的,但评论列表是随机的没有排序....我曾用$ match $ group $ sort和$ unwind – Jorin

+0

使用聚合框架请更新您的问题并发布您尝试的实际代码和输出错误是 – inspired

回答

2

Jorin,

试试这个:根据您的样本数据

db.comments.aggregate(
[ 
    {$match: {blog_id: ObjectId("56587befdb7224110f007233")}}, //match blogid 
    {"$unwind": "$comments"}, //unwind the comments array 
    {$sort: {"comments.dt": 1}}, //sort the comment documents by date 
    { 
    "$group": { 
     "_id": '$blog_id', //group comment documents by blog_id 
     "comments": { 
      "$push": "$comments" //push comments of same blog_id into an array 
     } 
    } 
}]) 

输出将是:

{ 
    "_id" : ObjectId("56587befdb7224110f007233"), 
    "comments" : [ 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "wat a nice car wow", 
      "_id" : ObjectId("565efa37635f09900d21a33a"), 
      "dt" : ISODate("2015-12-02T14:03:35.289Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "love is life budikhola ma dives", 
      "_id" : ObjectId("565efa76635f09900d21a33b"), 
      "dt" : ISODate("2015-12-02T14:04:38.661Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "bholi ajaya ko bihe", 
      "_id" : ObjectId("565efaa0635f09900d21a33c"), 
      "dt" : ISODate("2015-12-02T14:05:20.847Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "manish is nice", 
      "_id" : ObjectId("565efb17635f09900d21a33d"), 
      "dt" : ISODate("2015-12-02T14:07:19.704Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "niroj is cool", 
      "_id" : ObjectId("565efd53c22dddc80e8f461c"), 
      "dt" : ISODate("2015-12-02T14:16:51.730Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "ramesh is cool", 
      "_id" : ObjectId("565f0d376d82e24c11f6c0d1"), 
      "dt" : ISODate("2015-12-02T15:24:39.010Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "pradip is bhole baba", 
      "_id" : ObjectId("565f0f5d77f0c7bd11bbadd9"), 
      "dt" : ISODate("2015-12-02T15:33:49.578Z") 
     }, 
     { 
      "user_id" : ObjectId("562fa014888806820e21e0df"), 
      "user_full_name" : "Niroj Paudel", 
      "comment" : "honkog pokhara... he he ha ha", 
      "_id" : ObjectId("565f1034fd07cbfc1129db0b"), 
      "dt" : ISODate("2015-12-02T15:37:24.581Z") 
     } 
    ] 
} 
+0

这会给这样的结果[ { “_id”:“56587befdb7224110f007233” } ] – Jorin

+0

@Jorin对不起更新我的回答。错过了一步。将所有注释推送到注释数组持有者。更新的答案应该给你想要的输出 – inspired

+0

谢谢,它的工作。有一个问题是限制comments数组只能包含最后5条评论。 – Jorin

0

要做到这一点,你可以使用方法findById然后整理你的意见与猫鼬的方法sort

随着例如:

Blog.find({blog_id : YOUR_BLOG_ID}, 'comments') 
.sort('dt') 
.exec(function(err, docs){ 
console.log(docs); // do whatever you want with your docs 
}); 

类似的东西应该做的工作。

+0

更新,这将仅对单个文档进行排序。我想从特定blog_id的多文档意见进行汇总和分类 – Jorin

+0

我会更新我的awser – Charly