Использование агрегирования $ lookup только для подсчета - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь использовать агрегацию $ lookup, чтобы узнать, сколько документов в другой коллекции, поэтому нет необходимости захватывать все документы, что в этом случае даст мне исключение, потому что размер общий объем документа превышает лимит в 16 МБ. исключение я получил

MongoError: Total size of documents in visits matching pipeline's $lookup stage exceeds 104857600 bytes

запрос

Link.aggregate(
            [
                {$match: {...query}},
                { 
                    $lookup: {
                    from:"visits",
                    localField: "_id",
                    foreignField: "linkId",
                    as: "visits"
                    }
                },
                { 
                    $addFields: { totalVisits: { $size: "$visits" } },
                },
                {
                    $sort: {totalVisits: -1}
                }
            ]
        )

1 Ответ

1 голос
/ 28 мая 2020

Вы можете вернуть $ count из custom $ lookup pipeline :

{
    $lookup: {
        from: "visits"
        let: { id: "$_id" },
        pipeline: [
            { $match: { $expr: { $eq: [ "$$id", "$linkId" ] } } },
            { $count: "total" }
        ],
        as: "totalVisits"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...