I'm not sure whether it's easy or not to do it through .find() - As we know it's not working is because of embedded arrays, Please try this :
db.YourCollectionName.aggregate([{ $match: { "_id": ObjectId("5df94e17400289966e8707a7") } },
/** You can use $addFields if you want to retain remaining fields */
{ $project: { 'messages': { $arrayElemAt: ["$messages", 0] } } },
{ $project: { members: '$messages.message.members' } },
{ $project: { membersArr: { '$slice': ['$members', 0, 2] } } }])
Result :
/* 1 */
{
"_id" : ObjectId("5df94e17400289966e8707a7"),
"membersArr" : [
{
"example" : "object",
"blah" : "blah"
},
{
"example2" : "object2",
"blah2" : "blah2"
}
]
}
Collection Data :
/* 1 */
{
"_id" : ObjectId("5df94e17400289966e8707a7"),
"messages" : [
{
"message" : {
"members" : [
{
"example" : "object",
"blah" : "blah"
},
{
"example2" : "object2",
"blah2" : "blah2"
},
{
"example2" : "object3",
"blah2" : "blah3"
},
{
"example2" : "object4",
"blah2" : "blah4"
}
]
}
},
{
"message" : {
"members" : [
{
"example" : "object11",
"blah" : "blah11"
},
{
"example2" : "object211",
"blah2" : "blah211"
},
{
"example2" : "object311",
"blah2" : "blah311"
},
{
"example2" : "object411",
"blah2" : "blah411"
}
]
}
}
]
}
/* 2 */
{
"_id" : ObjectId("5df94e28400289966e870b34"),
"messages" : [
{
"message" : {
"members" : [
{
"example" : "objectF",
"blah" : "blah"
},
{
"example2" : "objectF2",
"blah2" : "blah2"
},
{
"example2" : "objectF3",
"blah2" : "blah3"
},
{
"example2" : "objectF4",
"blah2" : "blah4"
}
]
}
}
]
}
Ref : $addFields , $arrayElemAt , $slice