Сложный запрос монго работает в оболочке, но не в c #. Ошибка: размер документов в соответствующем конвейере превысил 104857600 байт. - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно выполнить сложный монго-запрос, содержащий поиск в других таблицах.Я проверил запрос в оболочке mongo и работает без проблем, но когда я пытаюсь выполнить тот же запрос, используя драйвер Mongo C # (v 2.8.1), я получаю сообщение об ошибке:

c# Command aggregate failed: Total size of documents in HistoricItems matching pipeline's $lookup stage exceeded 104857600 bytes

Я гуглил для похожихпроблемы, но я не нашел ничего связанного.

Вот мой запрос (довольно сложный):

db.getCollection('Queue').aggregate([
{
    $lookup:{
       from: 'Items',
       localField: 'Queue',
       foreignField: 'Queue',
       as: 'Items'
     }
},
{
    $unwind: {
        path: '$Items',
        preserveNullAndEmptyArrays: true
    }
},
{
    $lookup:{
       'from': 'HistoricItems',
       'let': { hQueue: '$Queue' },
       'pipeline': [
          { $match:
             { $expr:
                { $and:
                   [
                     { $eq: [ "$Queue",  "$$hQueue" ] },
                     { $gte: [ "$EndDate", { $dateFromParts: { year : { $year: new Date() }, month : { $month: new Date() }, day: { $dayOfMonth: new Date() } } } ] },

                   ]
                }
             }
          }
       ],
       'as': 'ClosedItems'
     }
}
])

Вот как запрос выполняется в C #.Я использую свой собственный анализатор запросов, чтобы добавить этапы к IAggregateFluent<BsonDocument>:

IAggregateFluent<BsonDocument> partialResult = null;
                IAsyncCursor<BsonDocument> result = null;

partialResult = _Database.GetCollection<BsonDocument>(collection).Aggregate();


foreach (var stage in stages)
{
       partialResult = addStage(partialResult, stage);
}


result = partialResult.ToCursor(); //Here I'm getting mentioned exception

Есть идеи, почему у Mongo Driver такие же результаты, как у Mongo Shell, и как их решить?

...