Как найти работы, которые никогда не заканчивались или выполнялись слишком долго в MongoDB? - PullRequest
0 голосов
/ 23 сентября 2019

Я использую AgendaJS для составления расписания, но иногда работа не выполняется и никогда не заканчивается.Я пытаюсь найти все jobs, которые либо были заблокированы более 10 минут, либо никогда не заканчивались.Приведенный ниже запрос работает, но он сильно загружает мою базу данных mongo.Как я могу сделать этот запрос MongoDB / mongoose более эффективным?

const staleJobQuery = {
    $or: [
        {
            $and: [
                {lockedAt: {$ne: null}},
                {
                    lockedAt: {
                        $lte: moment()
                            .subtract(10, "minutes")
                            .toDate()
                    }
                }
            ]
        },
        // This checked to see if the lastRunAt is greater than lastFinishedAt (aka, never finished)
        // AND that if it's not currently locked
        {
            $expr: {$and: ["$lastRunAt", {$gt: ["$lastRunAt", "$lastFinishedAt"]}]},
            lockedAt: null
        }
    ]
};
const jobs = await Job.find(staleJobQuery);
...