我不确定通过.find() 是否容易做到这一点 - 我们知道它不起作用是因为嵌入式数组,请试试这个:
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] } } }])
结果:
/* 1 */
{
"_id" : ObjectId("5df94e17400289966e8707a7"),
"membersArr" : [
{
"example" : "object",
"blah" : "blah"
},
{
"example2" : "object2",
"blah2" : "blah2"
}
]
}
收集数据:
/* 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"
}
]
}
}
]
}
参考: $addFields , $arrayElemAt , $slice