Chcesz $lookup
ale chcesz jest podobny do SQL jak łączenie, wszystkie pola w dokumencie głównym, więc odwijanie i zastępowanie root jest dodawane, aby scalić w 1 dokumencie.
Zapytanie
db.user_relations.aggregate([
{
"$match": {
"$expr": {
"$eq": [
"$userId",
"userId1"
]
}
}
},
{
"$unwind": {
"path": "$friendsArray"
}
},
{
"$sort": {
"friendsArray.lastTimeStamp": 1
}
},
{
"$limit": 10
},
{
"$replaceRoot": {
"newRoot": "$friendsArray"
}
},
{
"$lookup": {
"from": "users",
"localField": "userId",
"foreignField": "_id",
"as": "joined__"
}
},
{
"$unwind": {
"path": "$joined__"
}
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
"$joined__",
"$$ROOT"
]
}
}
},
{
"$project": {
"joined__": 0
}
}
])