Returning inner array elements from multiple document in sorted form

后端 未结 2 538
谎友^
谎友^ 2020-12-21 11:18

hyy there, my collection goes like this and I am trying to get all comments list of particular blog_id in sorted order of date.

    [
{
    \"_id\" : ObjectI         


        
相关标签:
2条回答
  • 2020-12-21 11:33

    Jorin,

    Try this:

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

    Based upon your sample data the output will be:

    {
        "_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("565efd53c22ffffdc80e8f461c"),
                "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 讨论(0)
  • 2020-12-21 11:50

    to do this, you can use method findById then sort your comments with method sort of mongoose.

    With a example :

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

    Something like that should do the job.

    0 讨论(0)
提交回复
热议问题