Игнорировать поле на этапе $ match в конвейере агрегации - PullRequest
0 голосов
/ 08 января 2019

У меня есть распознаватель GraphQL, который принимает аргумент test типа Boolean. Внутри этого преобразователя я использую Mongoose для выполнения агрегации MongoDB, возвращающей документы из моей коллекции users на основе значения аргумента test.

Вот как выглядит мой распознаватель GraphQL testUsers:

Query: {
    testUsers: async (root, args, context) => {
        return await User.aggregate([
            {
                $match: {
                    test: args.test
                }
            }
        ])
    }
}

Здесь args.test может быть true, false или undefined. Обработка дел true и false - это просто вопрос прямой передачи, но я хочу вернуть всех пользователей (независимо от значения test), если args.test равно undefined.

Есть ли значение, которое я могу передать для test на стадии $match, которое не учитывает поле test?

1 Ответ

0 голосов
/ 08 января 2019

Вы можете сделать что-то вроде этого

testUsers: async (root, args, context) => {
    let match = { test: args.test }
    if(typeof args.test === 'undefined') {
      match = {}
    }
    return await User.aggregate([
        {
            $match: match
        }
    ])
}

Вы можете взять переменную let и изменить ее значение, если args.test не определено

...