Database

[{"userId":"1","friendsArray":[{"lastTimeStamp":1,"message":1},{"lastTimeStamp":4,"message":4},{"lastTimeStamp":3,"message":3},{"lastTimeStamp":2,"message":2}]}]

Query

db.collection.aggregate([{"$unwind":"$friendsArray"},{$sort:{"friendsArray.lastTimeStamp":1}},{$group:{_id:"$_id",friendsArray:{$push:"$friendsArray"}},},{$addFields:{friendsArray:{$filter:{input:"$friendsArray",as:"z",cond:{$lt:[{$indexOfArray:["$friendsArray","$$z"]},10]}/** 10 is n first item*/}}},}])

Result