以sorting的forms从多个文档中返回内部数组元素

hyy在那里,我的collections是这样的,我想按照date的sorting顺序获得特定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 } ] 

我想按照下面的date降序列出特定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") } ]
[ { "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}} ]); 

该查询给出了来自多个文档的评论和所有相关评论,但评论是随机的。 $sorting不适合我工作

先谢谢你。

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") } ] } 

要做到这一点,你可以使用方法findById然后sorting你的意见与方法种findById 。。

举个例子:

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

像这样的东西应该做的工作。