К сожалению, даже с MongoDB 4.0+ очень сложно рассчитывать размер, как вы и предполагали, можно использовать длину String
. открытый запрос в ожидании возможной будущей функции в агрегированном конвейере.
Имея то, что у вас есть, я предлагаю использовать Javascript для результата вашего $lookup
результата.
Например, что-то вроде этого;
db.user.aggregate([
{
$lookup: {
from: "doc1",
localField: "userId",
foreignField: "userId",
as: "doc1arr"
}
},
{
$lookup: {
from: "doc2",
localField: "userId",
foreignField: "userId",
as: "doc2arr"
}
},
{
$lookup: {
from: "doc3",
localField: "userId",
foreignField: "userId",
as: "doc3arr"
}
}
]).map(perUserData => ({ userId: perUserData.userId, size: Object.bsonsize(perUserData) }));
выдаст что-то вроде;
[
{
"userId" : 1,
"size" : 250
},
{
"userId" : 2,
"size" : 350
}
]
См. Не-js часть на mongoplayground