Игнорировать поле на этапе $ match в конвейере агрегации

1

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

Вот как выглядит testUsers распознаватель 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?

Теги:
aggregation-framework
graphql

1 ответ

1
Лучший ответ

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

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 не определен

  • 0
    Хорошее решение и спасибо! Тем не менее, это было бы довольно грязно, если бы у меня было несколько аргументов.
  • 0
    Nopes добавляет столько полей, сколько вы хотите внутри $ match
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню